Ami*_*ani 20 javascript jasmine karma-jasmine angular2-testing angular
我知道tick()函数使用fakeAsync.而且我也可以使用fixture.whenStable().then()和async以及fakeAsync.我想知道两者的确切用例.任何人都可以用例子解释这一点
注意:我想在两种方案中使用虚假服务或存根.
Pau*_*tha 22
在大多数情况下,它们可以互换使用.除了外部模板和样式未内联编译到组件中进行测试(即使用SystemJS)的组件外,我无法想到除了另一个之外需要的任何东西.使用SystemJS时,会对外部模板和样式进行XHR调用.fakeAsync
在进行XHR调用时无法使用.另一方面,使用Webpack时,外部模板和样式可以内联编译,因此您可以使用fakeAsync
.
除此之外,我认为这是风格偏好的问题.我可以说的一件事是想象你需要进行多次异步调用,就像在这个例子中一样.你需要嵌套fixture.whenStable()
调用,调用start看起来非常难看
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(something)
changeSomething()
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(something)
changeSomething();
fixture.detectChanges()
fixture.whenStable().then(() => {
expect(somthingeElse)
})
})
})
Run Code Online (Sandbox Code Playgroud)
没有所有这些,这可能看起来更干净(更容易推理) fixture.whenStables()
fixture.detectChanges();
tick();
expect(something)
changeSomething()
fixture.detectChanges();
tick();
expect(somethingElse)
changeSomething()
fixture.detectChanges();
tick();
expect(somethingElse);
Run Code Online (Sandbox Code Playgroud)
我可能添加的另一件事是我的OCD部分总是需要检查我的调用fixture.whenStable()
是否被调用
fixture.whenStable().then(() => {
expect(...)
console.log('called...')
})
Run Code Online (Sandbox Code Playgroud)
想象一下,你忘了把测试包好了async
.没有它,测试将在fixture.whenStable
解决之前完成,你永远不会知道它.它看起来像测试通过,这是一个误报.实际发生的事情是,断言从未被调用过.
出于这个原因,我实际上已经离开了async
.但是如果你喜欢那种风格,并且相信自己总是将测试包裹起来async
,那就坚持下去吧.但是fakeAsync
,一切都被同步调用,所以没有机会不被调用.
归档时间: |
|
查看次数: |
7995 次 |
最近记录: |