2017-09-06 16 views
0

我有一个测试用例,用于我的角度组件,它基本上测试是否调用了不应该调用的函数。针对Angular 4应用程序的茉莉花单元测试问题

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); 
} 

根据该组件的代码和测试用例在spec,让我们假设else应该运行。这意味着someFunction()不应该被称为和someVariable = false 100ms后。当我运行这个测试时,它有时会通过,有时会失败。什么可能是测试失败的原因? setTimeout是否在测试用例中引起问题?我得到在测试失败时的错误是

预计真正成为falsy

+0

尝试增加测试中的超时时间 - 两者均为100ms,但setTimeout不准确,所以有时您的测试可能会首先解决,但并非总是如此。 –

+0

@DuncanThacker完美的工作。你可以请添加这个答案,我可以接受它吗? – user3344978

回答

0

尝试增加超时持续时间在您的测试 - 无论是100毫秒,但setTimeout的是不完全一样,所以它可能是有时你的测试首先解决,但并非总是如此。