这是我的演员模型。
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模型模块只需要执行一次,但是我猜它执行了两次。
答案 0 :(得分:0)
您的模型需要两次,因此会出现错误。
从测试用例中删除此行。
const Actor = require('../../ models / actor');
启动服务器时,只有应用程序应立即调用模型。
假设您已将模型包含在app.js中
this.actorModel = require('../../ models / actor');
访问模型
在测试用例中的app.actorModel。
我认为只要您需要此代码,便会运行:
mongoose.model('actors',ActorSchema);
因此,模块缓存将无法工作。