【问题标题】:jasmine angular2 check array length toEqual return true茉莉角2检查数组长度toEqual返回true
【发布时间】:2017-01-08 08:43:15
【问题描述】:

您好,我是 angular2 的新手,刚刚完成了英雄示例。我认为添加单元测试会很好,我从 hero.service 开始。

这是英雄服务

getHeroes():承诺{

return this.http.get(this.heroesUrl ).toPromise().then(response=>response.json().data as Hero[]).catch(this.handleError);

}

这是我的单元测试

const fakedHeroes:Hero[]=[
  { id: 1, name: 'Windstorm' },
  { id: 2, name: 'Bombasto' },
  { id: 3, name: 'Magneta' },
  { id: 4, name: 'Tornado' }
]
 describe('get Heroes test',()=>{
    let service:HeroService=null;
    let backend:MockBackend=null;
    beforeEach(inject([HeroService,MockBackend],(heroSerivce:HeroService,mockBackend:MockBackend)=>{
        service=heroSerivce;
        backend=mockBackend;
    }));
    it('get heroes',(done)=>{

        backend.connections.subscribe((connection:MockConnection)=>{
            let options=new ResponseOptions({status: 200, body: {data: fakedHeroes}})
            connection.mockRespond(new Response(options));
        })
        service.getHeroes().then(response=>{
            // console.log(response)
            console.log(response.length)
            expect(response.length).toEqual(2,'should be 4')

        });

        done();
    })
  })

从控制台,我可以看到响应的长度是 4..但是测试成功..

我错过了什么吗?

更新1:

我都试过了

expect(response.length).toEqual(2,'should be 4')
expect(response.length).toBe(2,'should be 4')

全部顺利通过

【问题讨论】:

    标签: angular jasmine


    【解决方案1】:

    done 的意义在于允许您等待异步任务解决。但你不是在等待任何东西。您正在调用它同步。你应该在异步任务解决后调用它(在这种情况下是承诺),在你“完成”测试之后,即

    service.getHeroes().then(res => {
      expect(...)
    
      done()
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-22
      • 2017-05-02
      • 2020-08-19
      • 2016-05-28
      • 2014-09-26
      • 2016-06-14
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多