wiz*_*ard 5 postgresql unit-testing mocking node.js sequelize.js
我正在尝试使用sequelize-mock,node和postgres进行单元测试,但是无论何时我对我的模拟进行查询,无论是否在模拟中获取了当前数据,我都会得到结果。看来sequelize-mock是根据我的查询自动生成的结果。我试图用autoQueryFallback选项,但我发现了SequelizeMockEmptyQueryQueueError。
例如:
describe('/GET/:email/exists', () => {
it('it should check if email exists - it should fail', async () => {
const email = 'somemail@mail.com';
try {
const res = await fakeDbUtil.isEmailExistsDb(email);
chai.assert.equal(res, null);
} catch(e) {
console.log(e);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我的模拟数据库中没有给定的电子邮件,因此我希望得到null结果。但是,我得到的结果包含我的模拟信息以及当前电子邮件(覆盖我的模拟原始电子邮件)。
我不确定我做错了什么吗? 还有其他一些可以与postgres和续集一起使用的良好模拟框架吗?
是的,autoQueryFallback: true选项允许sequelize-mock根据模型属性生成自动结果。如果您不想要自动化结果,可以autoQueryFallback: false在定义模型对象或在sequelizeMock 对象上声明。
const UserMock = SequelizeMock.define("user", {}, {
autoQueryFallback: false
});
Run Code Online (Sandbox Code Playgroud)
要模拟数据,您可以使用 Sequelize-mock QueryInterface 对查询结果进行排队。
因此,就您而言,您可以模拟电子邮件,如下所示。
UserMock.$queueResult(UserMock.build({
id: 2,
email: "something@gmail.com"
}));
Run Code Online (Sandbox Code Playgroud)
然后您可以调用数据库查询函数并期待结果。
const res = await fakeDbUtil.isEmailExistsDb(email);
expect(res.email).not.toBe("expectedEmail")
Run Code Online (Sandbox Code Playgroud)
有关模拟sequelize模型检查的更多信息此内容。
这个测试更多的是Jest框架的方式。这是一个很好的测试框架。如果您想尝试一下,请查看此内容