OverwriteModelError:编译后无法覆盖“ actors”模型

时间:2019-04-10 09:17:00

标签: node.js express jestjs

这是我的演员模型。

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的{​​{1}}代码,并且在路由中,我需要模型。

运行npm test后,它显示:

  

OverwriteModelError:编译后无法覆盖require("./startup/routes")(app)模型。

我该如何解决?

我知道对actor模型的需求发生了两次,但是由于模块缓存,Actor模型模块只需要执行一次,但是我猜它执行了两次。

1 个答案:

答案 0 :(得分:0)

您的模型需要两次,因此会出现错误。

从测试用例中删除此行。

  

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

启动服务器时,只有应用程序应立即调用模型。

假设您已将模型包含在app.js中

  

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

访问模型

  

在测试用例中的app.actorModel。

我认为只要您需要此代码,便会运行:

  

mongoose.model('actors',ActorSchema);

因此,模块缓存将无法工作。