Ger*_*cke 1 mocha.js mongoose mongodb node.js
我已阅读相关帖子:一旦编译 Mongoose,就无法覆盖模型
问题是这些解决方案都没有帮助我解决我的问题。
我收到标题中的错误,我有以下设置:
文件夹结构:
我的模型看起来像这样:
论坛.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;
Run Code Online (Sandbox Code Playgroud)
主题组.js
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const topicGroupSchema = new Schema({
title: String,
// Todo: add topics
})
module.exports = topicGroupSchema;
Run Code Online (Sandbox Code Playgroud)
我的 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();
})
})
})
Run Code Online (Sandbox Code Playgroud)
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();
})
})
Run Code Online (Sandbox Code Playgroud)
所以当我用 mocha 运行我的测试套件时,一切都按预期工作。但是当我更改某些内容并再次运行时,我收到错误
OverwriteModelError:
forums
编译后无法覆盖模型。
我将 mlab 与 mongoose 一起使用,而不是本地安装的 mongodb。也许它与此有关?我想不通,我检查了所有文件和导入等 10 次,但没有发现错误,你能吗?
小智 10
当我导出模型时,我解决了这个问题。
return mongoose.models[modelName]
? mongoose.model(modelName)
: mongoose.model(modelName, modelSchema)
Run Code Online (Sandbox Code Playgroud)
我已经解决了这个问题。
原来问题是我如何运行我的测试套件。我的npm run test
命令执行package.json
了以下操作:
"test": "mocha --watch"
这是错误。我认为--watch
不会重新实例化所有内容,就像“热模块更换”一样。
我安装nodemon
并更改了我的测试脚本,如下所示:
"test": "nodemon --exec \"mocha -R min\""
这确保重新运行整个文件并且没有出现错误。
另一个应该起作用的相关帖子:mocha --watch and mongoose models
归档时间: |
|
查看次数: |
1759 次 |
最近记录: |