Sinon一次测试中有多个存根

时间:2019-06-10 08:19:37

标签: node.js unit-testing sinon sinon-chai

我想测试失败 saveRecords 功能,在此之前,我必须进行身份验证并连接MongoDB。这是代码。

 before(() => {
    sinon.stub(Authentication, 'authenticate').returns(true);
    sinon.stub(mongodb, 'connect').resolves("connected");
    sinon.stub(models, 'saveRecords').throws(new Error("Error while saving record"));
});

it('Should error out if record is not inserted into the mongodb 
  collection', () => {
    orderWebhook(req, res)
    expect(res.result).to.contain("Error while saving record");
});

这是我正在测试的代码。

exports.orderWebhook = async (req, res) => {
    try {
        const isAuthenticated = Authentication.authenticate(req);
        if (isAuthenticated) {
        await mongodb.connect();
        await models.saveRecords(req.body");
        res.status(200).send('Saved Successfully!');
        } else {
        res.status(403).send('Error! Auth failed!');
        }
    } catch (error) {
        res.status(400).send(error.message);
    }
}

我假设此代码将对身份验证进行存根,然后连接MongoDB,然后尝试插入记录并引发错误。但是当我使用VSCode调试器进行调试时,它会运行两次

  1. 它第一次对authenticate函数返回true而不解决MongoDB连接并立即返回期望值。
  2. 它第二次正常运行所有三个并且抛出预期的错误。

在终端中运行测试时,它是失败,这可能是什么问题?

更新:我注意到问题与承诺有关。 Sinon正在解决该请求,我正在使用 await mongodb.connect(); ,但是它没有按预期工作,如果我删除了 await 并返回了 value < / strong>而不是诺言就可以了。

0 个答案:

没有答案