MochaJS 设置超时 ES6

MochaJS setTimeout ES6

在对我的 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 的回调中尝试了箭头函数或标准函数,但它在 yield 上崩溃了。 (Unexpected token)

checkToken 是生成器函数。

使用:

您不能将 setTimeout 与生成器一起使用。它是您传递给 co.wrap 的生成器,它将是 运行 异步的,并且 需要知道超时。您将需要 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");
}));