OverwriteModelError: Невозможно перезаписать модель актеров после компиляции - PullRequest
0 голосов
/ 10 апреля 2019

Это моя модель актера.

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var ActorSchema = new Schema({
    name: {
        type:String,
        required:true,
        minlength: [3, 'Actor Name must be at least 3 characters.'],
    },
    imdb_url:{
        type:String,
        required:true,
    }
});

module.exports = mongoose.model('actors', ActorSchema);

Это мой тестовый файл.

const request = require('supertest')
const Actor = require('../../models/actor')
let server;

describe('/actors', () => {
    beforeEach( () => { server = require('../../app');    });
    afterEach( () => { server.close() });
    describe('GET /', () =>{
        it("should return all actors", async () => {
            const res  = await request(server).get('/admin/actors');
            expect(1).toBe(1);
        })
    })
})

Итак, в тестовом файле я получил это: require('../../app');, который выполняется app.js код, который имеет эту строку require("./startup/routes")(app) и в маршрутах, мне требуются модели.

После запуска теста npm он говорит:

OverwriteModelError: Невозможно перезаписать actors модель после компиляции.

Как мне решить эту проблему?

Я понимаю, что требование для модели актера происходит дважды, но из-за кеширования модуля модуль модели актера должен выполняться только один раз, но я предполагаю, что он выполняется дважды.

1 Ответ

0 голосов
/ 10 апреля 2019

Ваша модель требуется дважды, поэтому появляется ошибка.

Удалить эту строку из контрольного примера.

const Actor = require ('../../ models / actor');

Только приложение должно вызывать модель сразу, когда вы запустите сервер.

Предположим, вы включили модель в app.js как

this.actorModel = require ('../../models/actor');

Модель доступа, подобная

app.actorModel в вашем тестовом примере.

Я думаю, что всякий раз, когдаВам потребуется, чтобы этот код выполнялся:

mongoose.model ('ctors ', ActorSchema);

Поэтому кэширование модуля не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...