node.js - Node 中的 Mongodb 测试

标签 node.js mongodb mocha.js

我一直使用 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();
  }
 });
});

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

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

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

最佳答案

由于您已经在使用 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 block 中抛出的错误非常非常重要 - 没有它,即使不抛出错误,测试仍然会通过。

关于node.js - Node 中的 Mongodb 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54950182/

相关文章:

node.js - 使用 Sequelize.js ORM 查询多个模型

mysql - 树的最佳数据库和模式?

mongodb - 如何根据 Mongodb 中的键删除重复项?

java - 带有嵌入对象的 MongoDB + Spring 数据转换器

javascript - 模块化gulp/node.js,调用模块变量

javascript - Nodejs - 简单的回声服务器不工作

javascript - 如何在 Mocha 中提供失败断言的上下文

node.js - 如何修复 'error from lcovParse: ' 'Failed to parse string' ?在 CircleICI v2.0 上使用带有 Mocha 的工作服

javascript - 后端 api 与数据库(作为服务)

node.js - 如何确保测试对象属性的更改不会传播到其他测试用例?