Karma Jasmine异步测试无法正常工作

时间:2016-08-10 14:56:51

标签: javascript angularjs jasmine karma-jasmine

我目前正在尝试测试使用异步任务的东西,具体我有以下几行:

setTimeout(function(){
 //do something
},300);

setTimeout也在函数中。现在在我的测试中,我调用这个包含setTimeout的函数,我收到一个错误,我在setTimeout里面使用的元素没有定义/ null。

现在我尝试了各种各样的方法,但似乎都没有。

我尝试将done包含到我的it中,并将函数调用放在setTimeout中,就像这样:

setTimeout(function(){
  callTheFunctionThatContainsTheTimeout();
  done();
});

不起作用。我尝试导入$timeout(我实际上使用的是角度),然后将函数调用放在$timeout中并在之后添加$timeout.flush,但没有任何作用。有谁知道我做错了什么以及我该怎么做?

1 个答案:

答案 0 :(得分:0)

我不知道你是否真的打算在另一个超时时间内调用包含内部超时的函数,但无论如何这是可行的,如果允许你更改{{1功能。

该功能看起来像:

callTheFunctionThatContainsTheTimeout

测试就像:

function callTheFunctionThatContainsTheTimeout(callback) {
  setTimeout(function(){
    console.log('ooo'); // do something here
    callback(); // execute a callback function
  },300);
}

如果您不需要第二次超时,测试将如下所示:

it('something to do', function(done){
  setTimeout(function(){
    callTheFunctionThatContainsTheTimeout(function(){ // the callback function
      expect(2+2).toEqual(4); // do your tests here
      done();
    });
  },200);
});