lew*_*stg 11 javascript zone jasmine angular
我正在使用Jasmine测试套件,其中包括"vanilla"Jasmine测试以及一些Angular 2组件的Jasmine测试.由于Angular 2的包含,zone.js被加载.这与Jasmine的时钟产生了冲突.例如,以下测试失败并显示错误,Error: Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?
describe('an async test with zone.js present', function() {
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
it('cannot install jasmine\'s mock clock', function() {
var callback = jasmine.createSpy('setTimeoutCallback')
setTimeout(callback, 55);
jasmine.clock().tick(56);
expect(callback).toHaveBeenCalled();
});
})
Run Code Online (Sandbox Code Playgroud)
这里是plunker为上述代码.
如果没有与"香草"测试分开提供Angular 2测试,我想知道可能有哪些选项.例如,是否可以使用区域执行Jasmine时钟的工作?例如,是否可以在声明之前模拟带区域的刻度或刷新所有计划任务?
对我来说,如果您卸载时钟,它可以工作beforeEach.它不是茉莉花推荐的,有点奇怪,因为对于卸载它更有意义afterEach.但是uninstall 在第一次install通话之前打电话给我修好了.
正如Angular文档中所述,您应该tick在作为模块fakeAsync一部分的主体中使用函数@angular/core/testing.
使用您的示例和TypeScript,它看起来像这样......
import { fakeAsync, tick } from '@angular/core/testing';
...
it('cannot install jasmine\'s mock clock', fakeAsync(() => {
var callback = jasmine.createSpy('setTimeoutCallback')
setTimeout(callback, 55);
tick(56);
expect(callback).toHaveBeenCalled();
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |