Angular 4 app的Jasmine Unit测试问题

时间:2017-09-06 20:21:22

标签: angular unit-testing jasmine karma-jasmine

我有一个我的角度组件的测试用例,它基本上测试是否调用了一个不应被调用的函数。

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导致测试用例出现问题吗?我在测试失败时得到的错误是

预计是真假的

1 个答案:

答案 0 :(得分:0)

尝试增加测试中的超时持续时间 - 两者都是100毫秒,但setTimeout并不准确,因此有时您的测试首先要解决,但并非总是如此。