unit-testing - Mocha 测试,在每个文件运行之前清理磁盘数据库
问题描述
我正在使用 Sails 1.x。
是否可以在每个测试文件运行之前重置 Sails.js 数据库?sails.lift()
我希望它在每次运行前完成后处于状态。我按照这里的文档 - https://sailsjs.com/documentation/concepts/testing - 但最终没有得到任何这样的解决方案。
我现在唯一的解决方案是更改lifecyle.test.js
before
并after
运行beforeEvery
- https://sailsjs.com/documentation/concepts/testingafterEvery
-所以每次测试前都会提升。但是需要很长时间才能抬起。
解决方案
这很简单。您只需要指定在数据源的连接中添加测试连接(取决于 Sails.js 的版本),在测试期间将其设置为活动状态并提供迁移策略'drop'
,即每次启动时重建您的数据库
models: {
connection: 'test',
migrate: 'drop'
},
我的连接 Sails.js 0.12.14
module.exports.connections = {
prod: {
adapter: 'sails-mongo',
host: 'localhost',
port: 27017,
database: 'some-db'
},
test: {
adapter: 'sails-memory'
},
};
我简化的生命周期.test.js
let app;
// Before running any tests...
before(function(done) {
// Lift Sails and start the server
const Sails = require('sails').constructor;
const sailsApp = new Sails();
sailsApp.lift({
models: {
connection: 'test',
migrate: 'drop'
},
}, function(err, sails) {
app = sails;
return done(err, sails);
});
});
// After all tests have finished...
after(async function() {
// here you can clear fixtures, etc.
// (e.g. you might want to destroy the records you created above)
try {
await app.lower()
} catch (err) {
await app.lower()
}
});
在 Sails 1 中它更简单
const sails = require('sails');
before((done) => {
sails.lift({
datastores: {
default: {
adapter: 'sails-memory'
},
},
hooks: { grunt: false },
models: {
migrate: 'drop'
},
}, (err) => {
if (err) { return done(err); }
return done();
});
});
after(async () => {
await sails.lower();
});
推荐阅读
- java - 如何在递归实体中找到对象?
- sql - MSAccess SQL 查询 - 将所有表与多个表联合 - 重复字段
- react-native - react-native 与 expo 出错:在“Connect(App)”的上下文中找不到“store”
- kubernetes - 为什么这个 ceph pod 崩溃
- java - Spring自动装配调用错误的构造函数
- bash - Bash:在目录中的特定文件上嵌套for循环
- python-2.7 - while 循环无限运行。无法使用计时器终止 while 循环
- hyperledger-fabric - 如何在超级账本结构中升级/更新链码
- java - 单个无变量语句中当前月份的第一天(或最后一天)?
- python-3.x - 寻求澄清 pytest 断言是否通过或失败取决于稍后的异常