我是单元测试的新手,但我尝试了很多方法来加载我的脚本(需要模块),以便与我的mocha测试脚本一起使用。无论我做什么,当我尝试阅读属性或函数或任何时,我总是得到不确定。任何人都可以帮助指出可能导致这种情况的原因吗?
rmq.js (要测试的脚本)
define(['bx_slider/1/bx_slider'], {
...
ansrTotal: 0,
...
init: function(settings) {
var self = this;
// do some stuff
return self;
}
});
测试bootstrap.js
require.config({
paths: {
'chai': '/node_modules/chai/chai',
'bx_slider/1/bx_slider': '/test/lib/bx_slider'
},
baseUrl: '/',
nodeRequire: require
});
mocha.setup({
ui: 'bdd'
});
require(['test/test'], function() {
if (window.mochaPhantomJS) {
mochaPhantomJS.run();
} else {
mocha.run();
}
});
test.js
define(['chai'], function(chai) {
var expect = chai.expect;
var rmq = require(['../src/js/rmq']);
describe('rmq test suite', function() {
before(function() {
return rmq.init();
});
it('should blah', function() {
expect(rmq.ansrTotal).to.equal(0);
});
});
});
如果有帮助,我的目录结构是
.
/node_modules
/src
/js
rmq.js
/test
/lib
bx_slider.js
require.js
test-bootstrap.js
test.js
我的CLI中的确切错误(我目前在此处编写和发布的内容)是
Testing: test/test.js
rmq test suite
"before all" hook
'undefined' is not a function (evaluating 'rmq.init()')
答案 0 :(得分:0)
正如评论中提到的Mathletics,您可以这样做:
define(['chai', '../src/js/rmq'], function(chai, rmq) {
如果出于某种原因,你不能这样做,那就有了另一种选择。 (也许你在问题中简化了你的代码,原因不再明显。)
define(['chai'], function(chai) {
var expect = chai.expect;
describe('rmq test suite', function() {
var rmq;
before(function (done) {
require(['../src/js/rmq'], function (_rmq) {
// Save the module we got to the `rmq` variable.
rmq = _rmq;
// Init and call `done` when finished.
rmq.init().then(done);
});
});
it('should blah', function() {
expect(rmq.ansrTotal).to.equal(0);
});
});
});
我假设rmq.init()
返回了一个承诺,因为您在代码中执行了return rmq.init()
,除非rmq.init()
返回一个承诺,否则这样做是没有意义的。如果情况并非如此,则您必须致电rmq.init()
,然后再致电done()
。
您拥有的代码无法正常工作,因为require(['../src/js/rmq'])
使模块异步,因此它不会返回模块。你必须像我上面所示的那样使用它。