NodeJS 续集如何嘲笑一个模型与笑话?

jtw3ybtb  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(118)

我正在尝试向项目添加测试。
我有个模特
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模型的单元测试的正确方法?

vaqhlq81

vaqhlq811#

相反,直接访问服务文件中的模型,创建数据访问层或存储库文件,这些文件将访问用户模型,在jest中,您可以模拟存储库文件函数。https://vin0d.medium.com/sequelize-mocking-with-jest-and-node-933c1f439579

相关问题