【问题标题】:How do you delete all documents from a MongoDB collection after each test?每次测试后如何从 MongoDB 集合中删除所有文档?
【发布时间】:2021-02-01 21:23:18
【问题描述】:

我正在尝试使用 jest 和 supertest 测试 express/mongoose api,但我不知道如何在每次测试后删除所有文档。
我尝试了以下解决方案,但都无济于事:

afterEach(() => {
  User.deleteMany();
});
afterEach(async () => {
  await User.deleteMany();
});
afterEach(() => {
  User.deleteMany()
    .then((info) => {
      console.log(info);
    })
    .catch((err) => {
      console.log(err);
    });
});

如果有帮助,这里是repo。违规代码位于 api/controllers/users.test.js

【问题讨论】:

  • 在我们的项目中,我们使用不同的方法。我们改为模拟保存/更新,因此我们实际上不会将文档保存/更新到数据库中,因为它可能会干扰真实数据。
  • 试试afterAll(async () => { await User.deleteMany(); });
  • @dimitristseggenes 感谢您的建议,我试过了,但每当我尝试使用 async/await 时它仍然超时
  • @GytisTG 这可能是我必须做的,我一定会调查的,谢谢!

标签: api express mongoose jestjs supertest


【解决方案1】:
beforeEach(async () => {
  const collections = await mongoose.connection.db.collections();
  for (let connection of collections) {
    await connection.deleteMany({});
  }
});

这将删除所有集合

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多