我有以下测试,我试图在sqlite内存数据库上测试我的db模型。
describe(`task model`, () => {
let Task, sandbox;
beforeEach(() => (sandbox = createSandbox()));
afterEach(() => sandbox.restore());
beforeEach(async () => {
const dbConnection = new Sequelize(`sqlite::memory:`, { logging: false });
stub(dbConnectionModule, `dbConnection`).value(dbConnection);
Task = require(`./models/task.js`).Task;
await dbConnection.sync({ force: true });
});
describe(`create a task`, () => {
let task;
beforeEach(async () => {
task = Task.build(taskData);
await task.save();
});
it(`gets an id`, () => expect(task.id).to.not.be.empty);
it(`shows up with a find all`, async () => {
const tasks = await Task.findAll();
expect(tasks).to.have.length(1);
});
});
});我可以验证连接已经new了两次,但是我的第二个测试令人困惑地返回创建了两个任务。
它似乎使用了与第一个测试相同的数据库!
我的印象是,每次为sqlite的内存db调用Sequelize构造函数时,我都会得到一个新的内存db,我是不是误解了什么?
或者,我如何删除并为新测试完全重新创建数据库?
令人惊讶的是,即使在同步之后,下面的代码似乎也不起作用
for (const model of Object.values(dbConnection.models))
model.destroy({ truncate: true });发布于 2021-09-28 17:31:28
嗨,
我所做的是替换索引文件中的数据库,而不是测试中的数据库。
models/index.js
...
const sequelize = require('sequelize')
let sequelize;
if(process.env.NODE_ENV === 'test') {
sequelize = new Sequelize('sqlite::memory:');
}
...在您的测试中,只需像往常一样导入
const { Task } = require('./models/index.js');
describe(`task model`, () => {
beforeEach(() => (sandbox = createSandbox()));
describe(`create a task`, () => {
let task;
beforeEach(async () => {
task = Task.build(taskData);
await task.save();
});
it(`gets an id`, () => expect(task.id).to.not.be.empty);
it(`shows up with a find all`, async () => {
const tasks = await Task.findAll();
expect(tasks).to.have.length(1);
});
});
});您必须/应该实现一个解决方案,以便在执行的每个测试中初始化数据库。
https://stackoverflow.com/questions/63985693
复制相似问题