我正在尝试向项目添加测试。
我有个模特
UserModel.js
const { Model, DataTypes } = require('sequelize')
const sequelize = require('../../lib/db/config')
class User extends Model {}
User.init({
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4
},
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
}
}, {
sequelize,
modelName: 'users'
});
然后,我想使用jest for创建一个测试,以UserService
模拟UserModel
。
const User = require('src/Users/UserModel')
const UsersService = require('src/Users/UserService')
jest.mock('src/Users/UserModel');
describe('UsersService', () => {
it('Create User User', async () => {
User.create.mockResolvedValue({ id: 'mock-user-uuid' })
const mockUser = {
firstName: 'mock first',
lastName: 'mock last',
}
const result = await UsersService.createUser(mockUser)
expect(result).toEqual({ ...mockUser, id: 'mock-user-uuid' })
})
})
我得到以下错误
No Sequelize instance passed
User.init(
有没有一种方法可以绕过对init的调用,或者哪种方法应该是创建模拟sequelize模型的单元测试的正确方法?
1条答案
按热度按时间vaqhlq811#
相反,直接访问服务文件中的模型,创建数据访问层或存储库文件,这些文件将访问用户模型,在jest中,您可以模拟存储库文件函数。https://vin0d.medium.com/sequelize-mocking-with-jest-and-node-933c1f439579