2015-11-07 51 views
0

虽然单元测试我的Node.js应用程序,我遇到了一个问题,摩卡和ES6同时使用setTimeoutMochaJS的setTimeout ES6

摩卡表示测试通过了,但是当我把别的东西(检查测试,以确保它的工作原理),它仍然表示,它获得通过,而应该失败。

代码:

describe('.checkToken', function() { 
    let user = {}; 
    let token = repository.newToken(); 

    it('token has expired', co.wrap(function*() { 
      setTimeout(function*() { 
       let result = yield repository.checkToken(user, token.token); 
       result.body.should.have.property("error"); 
      }, 1000) 
     })); 
    }); 
}); 

其他测试都在努力并没有在这种情况下没有问题。

我已经尝试过的箭头功能或在setTimeout回调的标准功能,但随后崩溃的产量。 (Unexpected token)

checkToken是发电机的功能。

使用:

  • 的NodeJS V4.2.1
  • 有限公司v4.6.0
  • 应该V7.1.0
  • 摩卡v2.3.3

回答

3

不能使用setTimeout与发电机。这是您传递给co.wrap将被异步运行的发电机,并需要了解超时。您需要yield超时(的东西yieldable,像一个thunk或承诺):

it('token has expired', co.wrap(function*() { 
    yield new Promise(resolve => { setTimeout(resolve, 1000); }); 
    let result = yield repository.checkToken(user, token.token); 
    result.body.should.have.property("error"); 
})); 
+0

谢谢你,就像一个魅力! – CreasolDev