node.js - 异步单元测试可能与 Mocha 中的测试数据库发生冲突
问题描述
我是 javascript 生态系统的新手,我正试图用一种体面的方式来围绕REST API 使用一组存储的固定装置(即文件)进行一些基本的单元测试。.json
我的入口点通过连接到测试数据库并发出ready
状态来设置测试环境。
if (!process.env.TESTING) {
/* Connect to MongoDB */
connect(process.env.DEV_DB_HOST, process.env.DEV_DB, () => app.emit(ready));
app.on(ready, () => {
app.listen(port, () => console.log(`Listening on port ${port}!`));
});
} else {
connect(process.env.TEST_DB_HOST, process.env.TEST_DB, () => app.emit(ready));
}
export default app;
建立连接后,使用夹具在测试数据库中重新创建集合并执行测试。
import Paper from '../models/paper.js';
describe('Home Page', () => {
before(async() => {
await new Promise((resolve, reject) => {
app.on(ready, () => resolve());
}).then(async() => {
try {
await Paper.collection.drop();
} catch(error) {
/* Mongo throws an exception if the collection in question does not exist */
}
await Paper.create(fixtures);
});
});
after(async() => {
await Paper.collection.drop();
});
it('Returns a list of items ordered by date in descending order', async() => {
const response = await chai.request(app).get('/');
expect(response.body).to.have.lengthOf(2);
expect(response.body).to.be.sortedBy("date", { descending: true });
});
});
如果我用 and 替换andbefore
钩子after
,因为测试是,那么钩子是否有可能被执行以进行测试并在另一个使用该集合的测试完成执行之前转储该集合?如果是这样,为每个测试用例填充带有固定装置的测试数据库的好方法是什么?beforeEach
afterEach
async
解决方案
推荐阅读
- codeigniter - 提交表单,它显示“column_name 不能为空”,但在表单内部,该值不为空。(代码点火器)
- c# - 将 DataTable 与 ListBox 绑定
- java - 从带有文件数组的 React 应用程序发送 POST 请求,在 Spring API 中作为字符串数组接收
- angular - Angular Universal:如何创建应用程序外壳并仅预渲染外壳?
- encoding - 这种编码类型的文本是什么?
- java - org.opencv.core.CvException: cv::Exception
- git-flow - 无法克隆 Gitflow
- docker - 使用 Nginx 的 Docker 容器中的反向代理问题
- static - 在 Flutter 中保留所有常量的最佳做法是什么?
- google-chrome-extension - 为什么 MakeAppx 生成 0 kb 文件?