【发布时间】:2017-09-08 21:40:01
【问题描述】:
我的角度组件有一个测试用例,它基本上是测试是否调用了不应该调用的函数。
describe('...', () => {
...
it('should not call someFunction', function(done) {
let spy = spyOn(comp, 'someFunction');
comp.mainFunction();
fixture.detectChanges();
expect(spy).not.toHaveBeenCalled();
setTimeout(() => {
expect(comp.someVariable).toBe(false);
done();
),100);
}
mainFunction() {
...
if(condition) {
this.someFunction();
} else {
setTimeout( () => {
this.someVariable = false;
},100);
}
根据组件中的代码和规范中的测试用例,假设else 应该运行。这意味着不应在 100 毫秒后调用 someFunction() 和 someVariable = false。当我运行这个测试时,它有时会通过,有时会失败。测试失败的原因可能是什么? setTimeout 是否导致测试用例出现问题?测试失败时我得到的错误是
预期为假
【问题讨论】:
-
尝试增加测试中的超时持续时间 - 两者都是 100 毫秒,但 setTimeout 并不准确,因此有时您的测试可能会先解决,但并非总是如此。
-
@DuncanThacker 这非常有效。能否请您添加一个答案以便我接受?
标签: angular unit-testing jasmine karma-jasmine