MochaJS setTimeout ES6

时间:2015-11-07 12:25:01

标签: javascript unit-testing mocha settimeout ecmascript-6

在对我的Node.js应用进行单元测试时,我在使用setTimeout时遇到了Mocha和ES6的问题。

Mocha说测试通过了,但是当我输入其他东西(检查测试,确保它有效)时,它仍然表示它已通过,而它应该失败。

代码:

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
  • Co v4.6.0
  • 应该是v7.1.0
  • Mocha v2.3.3

1 个答案:

答案 0 :(得分:3)

您不能将setTimeout与生成器一起使用。它是传递给co.wrap的生成器,它将异步运行, it 需要知道超时。您需要yield超时(作为yieldable,如thunk或promise):

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