Почему я получаю сообщение об ошибке «Невозможно переписать модель после компиляции» в Mongoose при повторном запуске теста? - PullRequest
0 голосов
/ 25 ноября 2018

Я прочитал соответствующий пост: Невозможно перезаписать модель после компиляции Mongoose

Проблема в том, что ни одно из этих решений не помогло мне с моей проблемой.

Я получаю ошибку в названии, и у меня есть следующие настройки:

Структура папки:

enter image description here

Мои модели выглядят так:

forums.js

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const topicGroupSchema = require("./topicGroups");

const forumSchema = new Schema({
    title: String,
    topicGroups: [topicGroupSchema]
})

const Forum = mongoose.model("forums", forumSchema);

module.exports = Forum;

topicGroups.js

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const topicGroupSchema = new Schema({
    title: String,
   // Todo: add topics
})

module.exports = topicGroupSchema;

Мои файлы test_helper и saveForum_test.js выглядят так:

saveForum_test.js

const assert = require("assert");
const Forum = require("../model/forums")

describe("Creating records", () => {
    it("can save a new forum", (done) => {
        const forum = new Forum({
            title: "CodeHUB"
        })
        forum.save()
            .then(() => {
                assert(forum.isNew)
                done();
            })
    })
})

test_helper.js

const mongoose = require("mongoose");
mongoose.Promise = global.Promise;

before(done => {
    mongoose.connect("mongodb://myuser:mypassword@ds221339.mlab.com:21339/clicker", { useNewUrlParser: true });
    mongoose.connection
        .once("open", () => {done()})
        .on("error", error => {
            console.warn("error", error)
        })
})

// FIXME: error when saved twice

beforeEach(done => {
    console.log(mongoose.connection.collections.forums)
    mongoose.connection.dropCollection("forums", () => {
        done();
    })
})

Так что, когда я запускаю свой набор тестов с mocha, все работает как положено.Но когда я что-то меняю и запускаю снова, я получаю ошибку

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

Я использую mlab с mongoose ине локальный установленный mongodb.Может, с этим что-то связано?Я не могу понять это, я проверил все файлы и импорт и т. Д. 10 раз и не могу найти ошибку, не так ли?

1 Ответ

0 голосов
/ 25 ноября 2018

Я решил проблему.

Оказывается, проблема заключалась в том, как я запускал свой набор тестов.Моя npm run test команда в package.json сделала следующее:

"test": "mocha --watch"

Здесь была ошибка.Я думаю, что --watch не восстанавливает все и просто как «Горячая замена модуля».

Я установил nodemon и изменил свой тестовый скрипт так:

"test": "nodemon --exec \"mocha -R min\""

Это гарантирует повторный запуск всех файлов, и никаких ошибок не появляется.

Еще один связанный пост, который должен работать: модели мокко - часы и мангуст

...