Mocha 测试,在每个文件运行之前清理磁盘数据库
Mocha tests, clean disk database before every file runs
我正在使用 Sails 1.x。
是否可以在每个测试文件 运行 之前重置 Sails.js 数据库?我希望它在每个 运行 之前 sails.lift()
完成后处于状态。我按照这里的文档 - https://sailsjs.com/documentation/concepts/testing - 但没有得到这样的任何解决方案。
我现在唯一的解决方案是将 lifecyle.test.js
before
和 after
更改为 运行 beforeEvery
和 afterEvery
- https://sailsjs.com/documentation/concepts/testing - 所以每次测试前都会提升。但是需要很长时间才能抬起。
这很容易做到。您只需要指定在您的数据源连接中添加测试连接(取决于 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'
},
};
我的简化版lifecycle.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();
});
我在 bootstrap 测试文件中使用它来清理数据库。
const sails = require('sails');
before((done) => {
sails.lift({
log: {
level: 'silent'
},
datastores: {
default: {
adapter: 'sails-disk',
inMemoryOnly: true
}
},
models: {
migrate: 'drop',
archiveModelIdentity: false
}
}, function (err, sails) {
if (err) return done(err);
done(err, sails);
});
});
after(async () => {
await sails.lower();
});
beforeEach((done) => {
sails.once('hook:orm:reloaded', done);
sails.emit('hook:orm:reload');
});
我正在使用 Sails 1.x。
是否可以在每个测试文件 运行 之前重置 Sails.js 数据库?我希望它在每个 运行 之前 sails.lift()
完成后处于状态。我按照这里的文档 - https://sailsjs.com/documentation/concepts/testing - 但没有得到这样的任何解决方案。
我现在唯一的解决方案是将 lifecyle.test.js
before
和 after
更改为 运行 beforeEvery
和 afterEvery
- https://sailsjs.com/documentation/concepts/testing - 所以每次测试前都会提升。但是需要很长时间才能抬起。
这很容易做到。您只需要指定在您的数据源连接中添加测试连接(取决于 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'
},
};
我的简化版lifecycle.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();
});
我在 bootstrap 测试文件中使用它来清理数据库。
const sails = require('sails');
before((done) => {
sails.lift({
log: {
level: 'silent'
},
datastores: {
default: {
adapter: 'sails-disk',
inMemoryOnly: true
}
},
models: {
migrate: 'drop',
archiveModelIdentity: false
}
}, function (err, sails) {
if (err) return done(err);
done(err, sails);
});
});
after(async () => {
await sails.lower();
});
beforeEach((done) => {
sails.once('hook:orm:reloaded', done);
sails.emit('hook:orm:reload');
});