Proxyquire не найдет модели в контроллере - PullRequest
0 голосов
/ 14 января 2019

Я настраиваю тестирование с помощью 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. Но это не так.

Спасибо за чтение и надеюсь, что вы ответите!

...