Я настраиваю тестирование с помощью jest в своем приложении и хочу использовать mocking с sequelize-test-helpers и proxyquire. Но я столкнулся с проблемой с proxyquire. Он не найдет путь, который я дал, и создаст заглушку, которая предоставляется.
Когда я указываю путь, он просто выдает сообщение об ошибке: Не удается найти модуль '../models' из '/ UserService / src / controllers'. Я нашел код здесь -> https://itnext.io/unit-testing-sequelize-models-made-easy-108f079f1e38
ЦСИ / модели / user.js
const Sequelize = require('sequelize');
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('users', {
id: {
primaryKey: true,
type: DataTypes.UUID,
defaultValue: Sequelize.UUIDV4,
},
email: {
type: DataTypes.STRING,
unique: true,
},
password: DataTypes.STRING,
phone: DataTypes.STRING,
isAdmin: DataTypes.BOOLEAN,
});
User.associate = models => {
User.belongsToMany(models.groups, {
through: 'users_groups',
as: 'groups',
foreignKey: 'userId',
});
};
return User;};
// src / controller / usercontroller.js
const { users } = require('../models');
module.exports = {
async create(email, password, phone) {
//code here
},
async retrive() {},
async retriveOne(email) {
// code here
},
async update() {},
async delete() {},
};
// src / test / controllers / user.test.js
const proxyquire = require('proxyquire');
const chai = require('chai');
chai.use(require('sinon-chai'));
let expect = chai.expect;
const sinon = require('sinon');
const { makeMockModels } = require('sequelize-test-helpers');
const mockModels = makeMockModels({ user: { findOne: sinon.stub() } });
// HERE IS THE PROBLEM
const controller = proxyquire('../../controllers/UserController', {
'../models': mockModels,
});
const fakeUser = { update: sinon.stub() };
describe('User testing', () => {
const user = {
email: 'www.test@test.com',
password: 'password',
phone: '987651723',
isAdmin: false,
};
const resetStubs = () => {
mockModels.user.findOne.resetHistory();
fakeUser.update.resetHistory();
};
let result;
context('testing retriveOne() on a User that doesnt exist ', () => {
beforeAll(async () => {
mockModels.user.findOne.resolves(undefined);
result = await controller.retriveOne(user.email);
});
afterAll(resetStubs);
it('returned null', () => {
console.log(result);
expect(user).to.be.null;
});
});
Я ожидаю, что контроллер не будет использовать пользователя, созданного в models / index.js, а скорее изменит его с помощью заглушки () с makeMockModels. Но это не так.
Спасибо за чтение и надеюсь, что вы ответите!