Node.js 使用Sequelize mock和jest对模拟findAll和findOne的模型进行Sequelize
对于我用户的CRUD,我正在使用and编写一个单元测试。模型模拟对我来说很有效,但我的问题是关于模拟模型Node.js 使用Sequelize mock和jest对模拟findAll和findOne的模型进行Sequelize,node.js,unit-testing,jestjs,sequelize.js,Node.js,Unit Testing,Jestjs,Sequelize.js,对于我用户的CRUD,我正在使用and编写一个单元测试。模型模拟对我来说很有效,但我的问题是关于模拟模型findAll()和findOne()在我的用户测试套件中调用这两个函数都会返回我在模拟模型中定义的排队结果。我希望,如果我调用findAll(),我应该获得排队结果中定义的所有数据,如果我调用findOne(),我应该根据传递的id从排队结果中只获得一个数据。设置mock modelautoQueryFallback:false对我不起作用 以下是一段代码片段: 在mycontrollers
findAll()
和findOne()
在我的用户测试套件中调用这两个函数都会返回我在模拟模型中定义的排队结果。我希望,如果我调用findAll()
,我应该获得排队结果中定义的所有数据,如果我调用findOne()
,我应该根据传递的id从排队结果中只获得一个数据。设置mock modelautoQueryFallback:false
对我不起作用
以下是一段代码片段:
在mycontrollers/users.js中
module.exports = {
async list (req, res) {
Users.findAndCountAll({
limit: 10,
offset: 0
}).then(data => {
console.log('Users >>> ', data);
});
},
async view (req, res) {
Users.findOne({
where: { id: req.params.id }
}).then(data => {
console.log('User Data by ID >>> ', data);
});
}
};
为了模拟我的用户模型,我必须在模型旁边创建一个\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
目录(Jest就是这样工作的)。所以,我的模型中有这个目录结构
> models/users.js
> models/__mocks__/users.js
嘲弄
我想使用模拟模型中的数据集测试users.list和users.view
jest.mock('../models/users');
describe('Testing use.list()', () => {
it('UsersController.list() should return a status code 201 and all Users data in object array', async () => {
await users.list(req, res);
expect(res.json).toBeCalledWith(
expect.objectContaining({
data: expect.any(Object)
})
);
});
it('UsersController.view() should return a status code 201 and user data obj', async () => {
//Passed req.params.id = 2
await user.login(req, res);
expect(res.status).toHaveBeenCalledWith(failureCode);
expect(res.json).toBeCalledWith(
expect.objectContaining({
data: expect.any(Object)
})
);
});
});
你设法解决了这个问题吗?我遇到了同样的情况。你解决了这个问题吗?我遇到了同样的情况。
jest.mock('../models/users');
describe('Testing use.list()', () => {
it('UsersController.list() should return a status code 201 and all Users data in object array', async () => {
await users.list(req, res);
expect(res.json).toBeCalledWith(
expect.objectContaining({
data: expect.any(Object)
})
);
});
it('UsersController.view() should return a status code 201 and user data obj', async () => {
//Passed req.params.id = 2
await user.login(req, res);
expect(res.status).toHaveBeenCalledWith(failureCode);
expect(res.json).toBeCalledWith(
expect.objectContaining({
data: expect.any(Object)
})
);
});
});