尝试使用Mocha测试时模型未正确加载

Sha*_*oon 10 javascript mocha.js node.js express gruntjs

我正在尝试使用mocha来测试我的快递应用.我的文件夹结构是:

myapp
|-app
|--models
|-test
|--mocha-blanket.js
|--mocha
|--karma
|-server.js
Run Code Online (Sandbox Code Playgroud)

server.js是我的快递服务器.之前我曾经有过options.require,但是文档说要使用blanket.js.我mocha-blanket.js是:

var path = require('path');
var srcDir = path.join(__dirname, '..', 'app');

require('blanket')({
  // Only files that match the pattern will be instrumented
  pattern: srcDir
});
Run Code Online (Sandbox Code Playgroud)

我的Gruntfile有:

mochaTest:
  options:
    reporter: "spec"
    require: 'test/mocha-blanket.js'
    # require: "server.js"
  coverage:
    options:
      reporter: 'html-cov',
      captureFile: 'mocha-coverage.html'
    src: ["test/mocha/**/*.js"]
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

>> Mocha exploded!
>> MissingSchemaError: Schema hasn't been registered for model "Company".
>> Use mongoose.model(name, schema)
>>     at Mongoose.model (/myapp/node_modules/mongoose/lib/index.js:315:13)
>>     at Object.<anonymous> (/myapp/test/mocha/controllers/company.js:4:22)
>>     at Module._compile (module.js:456:26)
>>     at Module._extensions..js (module.js:474:10)
Run Code Online (Sandbox Code Playgroud)

我确定我做错了什么(或许多事情).但我不确定是什么.有任何想法吗?

rob*_*lep 9

我认为您的测试代码未正确初始化您的应用程序,特别是Mongoose架构和模型的初始化.

mocha/controllers/company.js,您可能正在使用类似于此的代码:

var Company = mongoose.model('Company');
Run Code Online (Sandbox Code Playgroud)

但是,如果Company跳过模型的初始化(将模型与模式挂钩),那么这将引发您所获得的错误.

为了给出一个非常简短的独立示例,此代码将失败并出现相同的错误:

var mongoose = require('mongoose');
var Company  = mongoose.model('Company');
Run Code Online (Sandbox Code Playgroud)

此代码,添加初始化,工作正常:

var mongoose = require('mongoose');

mongoose.model('Company', new mongoose.Schema());

var Company = mongoose.model('Company');
Run Code Online (Sandbox Code Playgroud)