遇到jasmine 2问题并且异步规格连线:
define(['foo'], function(foo) {
return describe('foo', function() {
beforeEach(function(done) {
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
return setTimeout((function() {
console.log('inside timeout');
return done();
}), window.jasmine.DEFAULT_TIMEOUT_INTERVAL);
});
return it('passes', function() {
return expect({}).toBeDefined();
});
});
});
当我经历业力时,我会回来
错误:超时 - 超时内未调用异步回调 由jasmine.DEFAULT_TIMEOUT_INTERVAL指定。
然后规格失败。我试图覆盖默认超时但我无法通过错误
答案 0 :(得分:20)
您正在使用与Jasmine用于在超时时测试失败相同的超时间隔,即您的超时被触发以使用Jasmine的默认间隔触发,但未通过测试。
如果将超时设置为小于jasmine默认超时,则测试通过。
describe('foo', function () {
beforeEach(function (done) {
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
setTimeout(function () {
console.log('inside timeout');
done();
}, 500);
});
it('passes', function () {
expect({}).toBeDefined();
});
});
请参阅小提琴here
答案 1 :(得分:5)
我的2分。我在另一个场景中也遇到了问题中提到的这个错误。
我有一个非常简单的规范:
describe('login feature', function() {
it('should show the logged in user name after successful login', function(done) {
expect({}).toBeDefined();
//done(); // if you don't call this done here, then also above error comes
});
});
在' it'
中查看已注释的// done()函数答案 2 :(得分:2)
可能适合您的另一个选项是使用async
async函数是Angular测试实用程序之一,必须导入...它接受一个无参数函数并返回一个函数,该函数成为beforeEach的真正参数
async参数的主体看起来很像同步beforeEach的主体。关于它没有明显的异步。例如,它没有返回一个promise,也没有完成函数调用,就像在标准的Jasmine异步测试中一样。在内部,异步安排beforeEach的主体在一个隐藏异步执行机制的特殊异步测试区域中运行。
请参阅:https://angular.io/docs/ts/latest/guide/testing.html#!#async-in-before-each
describe('Component: MyComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{provide: MyService, useValue: MyServiceMock()},
]
})
// Using webpack through Angular Cli. You may need ".compileComponents()"
fixture = TestBed.createComponent(MyComponent)
component = fixture.componentInstance
// Initialize the component
component.ngOnInit()
fixture.detectChanges()
}))
it('should show the logged in user name after successful login',() {
expect({}).toBeDefined()
})
})