我正在尝试使用sequelize-mock对nodejs-express方法进行单元测试。
主计长
const getDetailsByUserId = async (id) => {
try {
const userId = id ?? 0;
const details = await Model.findAll(
{
raw: true,
where: { user_id: userId }
}
);
if (details && details .length > 0) {
return {
status: 200,
success: true,
message: 'details found.',
data: details
}
}
return {
status: 404,
success: false,
message: 'details not found',
data: []
}
} catch (error) {
return {
status: 500,
success: false,
message: error.message || "An error occurred while getting details.",
data: null
}
}
}
测试
jest.mock('../models/details', () => () => {
const SequelizeMock = require("sequelize-mock");
const dbMock = new SequelizeMock();
return dbMock.define('users', [
{
id: 1,
user_id: 123
name: 'John Doe 1'
},
{
id: 2,
user_id: 456
name: 'John Doe 2'
},
{
id: 3,
user_id: 789
name: 'John Doe 3'
}
]);
});
test('should return 404 and an empty array', async () => {
const userId = 147;
const details = await controller.getDetailsByUserId(userId);
expect(details.status).toEqual(404);
});
我总是得到200而不是404的状态。我检查了返回的数据,它返回了定义的模拟模型的记录。
实际结果:
[
fakeModelInstance {
options: {
timestamps: true,
paranoid: undefined,
createdAt: undefined,
updatedAt: undefined,
deletedAt: undefined,
isNewRecord: true
},
_values: {
'0': [Object],
'1': [Object],
'2': [Object],
user_id: 147,
id: 1,
createdAt: 2021-09-18T00:55:25.976Z,
updatedAt: 2021-09-18T00:55:25.976Z
},
dataValues: {
'0': [Object],
'1': [Object],
'2': [Object],
user_id: 147,
id: 1,
createdAt: 2021-09-18T00:55:25.976Z,
updatedAt: 2021-09-18T00:55:25.976Z
},
hasPrimaryKeys: true,
__validationErrors: []
}
]
问题:
1.对于这种情况,我可以做些什么来获得预期的结果(空数组)吗?
1.当raw: true
被模仿时,它似乎不工作。有没有一种方法可以将结果记录在原始对象上?
**注意:**这只会发生在单元测试中。当访问postman上的端点时,它会返回预期的结果。
2条答案
按热度按时间ecbunoof1#
根据文档,
findAll()
总是会根据选项中的where查询返回一个单一结果的数组。这就是为什么你永远不会得到一个空数组。查看更多信息:https://sequelize-mock.readthedocs.io/en/stable/api/model/#findalloptions-promisearrayinstance
eqfvzcg82#
查询结果可以使用查询处理器生成。使用$useHandler(handler)-〉QueryInterface模拟查询结果,并使用
queryOptions
过滤结果。例如
./models/details.js
:./controller.js
:./controller.test.js
:试验结果:
软件包版本: