问题描述
我正在构建一个新项目,并尝试使用 TDD 作为我的默认方法并尝试将其应用于集成测试。
//controller.js
const UserService = require('../services/user');
module.exports = {
// corresponds to /users
getAllUsers: async (req,res,next) => {
const users = await UserService.fetchAllUsers();
res.send(users);
},};
const models = require('../database/models/index'); // I tried also with destructuring
module.exports = {
fetchAllUsers: async () => models.user.findAll(),};
我的实际测试文件看起来像
const request = require('supertest');
const SequelizeMock = require('sequelize-mock');
const app = require('..');
const dbMock = new SequelizeMock();
const models = require('../src/database/models/index');
jest.mock('../src/database/models/index',() => ({
user: jest.fn(),}));
models.user.mockImplementation(() => {
const UserMock = dbMock.define('user',{});
UserMock.$queueResult(UserMock.build({
username: 'username',mail: 'myMail@myMail.com',}));
return UserMock;
});
describe('Demo test',() => {
it('should respond to users route',(done) => {
request(app)
.get('/users')
.end((err,res) => {
expect(err).toBeNull();
expect(res.status).toBe(200);
expect(res.json).toBe('object');
done();
});
});
});
所有这些实际上都有效,但是当我试图模拟用户时,我 TypeError: models.user.findAll is not a function
我需要用 UserMock 的值替换 model.user。
有没有办法做到这一点?或者我应该模拟 findAll 之类的
jest.mock('../src/database/models/index',() => ({
user: () => ({ findAll: jest.fn() }),}));
``
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)