给出以下代码:
var api = {};
var models = {};
describe(vars.project.name, function() {
before(function(done) {
// Loading models
models_module.getDbInstance('0.1', function(res) {
db = res;
var config = {
server: server,
db: db,
v: '0.1'
};
// Importing all the tests
api.base = require('./functions/api.base.js')(config);
models.test_table = require('./functions/models.test_table.js')(config);
done();
});
});
// Tests general status
describe('checking the status of the API without a version', function() {
it('should succeed with 200 OK', api.base.status.without_route);
});
});
这将使用我的0.1版本模型加载数据库,然后require
我的测试定义,将数据库和其他一些配置信息传递给它。这是理论上的。
相反,我收到错误Cannot read property 'status' of undefined
。这意味着它在完成before
函数之前尝试执行我的测试,或者至少初始化它。
我还尝试了async.series
(加载模型,然后加载测试)但它没有做任何事情,只显示0 passing (0ms)
。
这有什么问题?
答案 0 :(得分:1)
我看到树,错过了森林......
这不起作用:
describe('checking the status of the API without a version', function() {
it('should succeed with 200 OK', api.base.status.without_route);
});
问题在于,当Mocha 构建测试套件时,您正在尝试评估api.base
。简而言之,您应该记住,传递给describe
的回调在测试开始之前进行评估。在执行单个测试之前,不会评估传递给it
调用的回调。 (请参阅我的另一个answer了解所发生情况的所有详细信息。)因此,在评估api.base.satus.without_route
的阶段,api.base
尚未设置。
describe('checking the status of the API without a version', function() {
it('should succeed with 200 OK', function () {
api.base.status.without_route();
});
});
根据你在问题中的代码,我假设api.base.status.without_route
是一个在你的条件不满足时会失败的函数。它是一个功能看起来很奇怪,但我不知道你的应用程序的更大的上下文。我的假设基于这样一个事实,即传递给it
的第二个参数应该是一个回调。如果它不是函数,那么您需要编写所需的任何特定测试(if (api.base.status.without_route === ...) etc.
)