我正在尝试使用sequelize-mock
,node和postgres进行构建单元测试,但每当我查询我的模拟时,无论我是否在模拟中获取当前数据,我都会得到结果。根据我的查询,似乎sequelize-mock是automatically generated results。我尝试使用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);
}
});
});
我的模拟数据库中没有给定的电子邮件,因此我希望得到null
结果。但是,我得到的结果包含我的模拟以及当前的电子邮件(覆盖我的模拟原始电子邮件)。
我不确定我做错了什么? 还有其他一些好的模拟框架可以用于postgres和sequelize吗?
答案 0 :(得分:0)
是的,autoQueryFallback: true
选项允许sequelize-mock根据“模型”属性生成自动结果。如果您不希望获得自动化结果,则可以在定义模型对象时或在sequelizeMock对象上声明autoQueryFallback: false
。
const UserMock = SequelizeMock.define("user", {}, {
autoQueryFallback: false
});
要模拟数据,可以使用Sequelize-mock QueryInterface将查询结果排队。
因此,在您的情况下,您可以模拟如下电子邮件。
UserMock.$queueResult(UserMock.build({
id: 2,
email: "something@gmail.com"
}));
然后您可以调用数据库查询函数并期待结果。
const res = await fakeDbUtil.isEmailExistsDb(email);
expect(res.email).not.toBe("expectedEmail")
有关模拟序列化模型的更多信息,请this。
此测试更像是 Jest 框架方法。这是一个很好的测试框架。如果您想尝试一下,请查看this