gpt4 book ai didi

node.js - 使用 postgres 和 sequelize-mock 进行单元测试模拟

转载 作者:搜寻专家 更新时间:2023-10-31 22:51:21 25 4
gpt4 key购买 nike

我正在尝试使用 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 一起使用的良好模拟框架?

最佳答案

是的,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")

有关 mocking sequelize 模型检查的更多信息 this出。

此测试更像是一种 Jest 框架方式。这是一个很好的测试框架。如果您想尝试一下,请查看 this

关于node.js - 使用 postgres 和 sequelize-mock 进行单元测试模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47989651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com