【问题标题】:Issue with Jasmine Unit test for Angular 4 appAngular 4 应用程序的 Jasmine 单元测试问题
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 2015-03-21
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多