【问题标题】:Mongodb testing in NodeNode 中的 Mongodb 测试
【发布时间】:2019-07-23 19:32:16
【问题描述】:

我一直在使用 Mocha 在 Node 中进行测试,因为它似乎是大多数人使用的。我也在使用 MongoDB 来存储我的数据,因为我的服务器是一个简单的 API 服务器,所以我几乎所有的方法都只是简单的数据库查询,我正在尝试使用 Mocha 进行测试。 现在我面临的问题是(除了测试异步函数似乎非常困难的事实之外)我似乎找不到测试 mongoDB 异常的正确方法。

  it('Should not create account', async (done) => {
   try {
    await createAccountDB(user);
    await createAccountDB(user);
  } catch (err) {
    assert.notEqual(err, null);
    console.log(err);
  }
  finally {
    done();
  }
 });
});

我在这里尝试的是为用户创建一个帐户(基本上只是将对象保存到数据库中),然后再次创建相同的帐户,这会导致重复密钥错误。

现在,这不起作用,据我所知,这是因为我已经定义了异步和完成。我这样做的原因是,如果我不定义 async 我需要一大堆 .then 和 .catches 这会使代码看起来很糟糕,但如果我不包括 then done() 在 finally块,我的测试似乎永远不会到达 catch 块。

有没有什么方法可以在 Mocha 中编写这样的测试,并且不会让你的代码看起来非常糟糕?

【问题讨论】:

    标签: node.js mongodb mocha.js


    【解决方案1】:

    由于您已经在使用 async/await 模型,因此您不必为测试用例使用 done 回调。当您有不止一种指示测试完成的方法时,某些版本的 mocha 会警告您。试试这个:

    it('should not create an account', async function() {
       try {
        await createAccountDB(user);
        await createAccountDB(user);
        throw new Error('Did not reject a duplicate account');
      } catch (err) {
        assert.notEqual(err, null);
        // any other assertions here
      }
    });
    

    try/catch 块中抛出的错误非常重要 - 没有它,即使没有抛出错误,测试仍然可以通过。

    【讨论】:

    • 太感谢了,这个居然修好了,没想到在try块里抛出错误,太聪明了!
    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2011-09-04
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多