我遇到了一个问题,其中node的require方法已被requirejs的require方法所取代。我们正在运行一个骨干应用程序,我已经设置了一些mocha测试。目标是能够在浏览器中运行测试,并使用grunt-mocha-test并在每个构建中使用grunt-contrib-watch在终端中运行它们。
我还没有完全理解所有这些部分是如何组合在一起的,所以请原谅任何缺乏解释,理解。
这是我们的一个测试文件models.js:
的设置describe("Models", function() {
var should;
var firstModule = 'models/firstModel';
var secondModule = 'models/secondModel';
var chaiModule = 'chai';
modules = [
firstModule,
secondModule,
chaiModule
];
before(function(done) {
require(modules, function(firstModel, secondModel, chai){
FirstModel = eventModel;
SecondModel = eventDetailsModel;
should = chai.should();
done();
});
});
beforeEach(function(done) {
NewFirstModel = new FirstModel();
NewSecondModel = new SecondModel();
done();
});
describe("first model", function() {
it("should exist", function (done) {
NewFirstModel.should.exist();
done();
});
});
});
将grunt-contrib-requirejs与这些设置一起使用:
compile:
options:
baseUrl: "<%= tmpDir %>/scripts"
mainConfigFile: "<%= tmpDir %>/scripts/init.js"
name: "../../bower_components/almond/almond"
out: "<%= distDir %>/scripts/app.js"
preserveLicenseComments: false
cjsTranslate: true
wrapShim: true
uglify:
ascii_only: true
mochaTest grunt任务:
test:
options:
reporter: 'spec',
src: ['app/test/*.js']
我有一个test.html文件,其中包含每个单独的测试文件,并正确测试我扔给他们的所有内容。
但是,当我运行指向相同测试文件的mochaTest grunt任务时,我收到以下错误:
AssertionError: path must be a string
引用models.js中的这一行:
require(modules, function(firstModel, secondModel, chai){
如果我在控制台上记录了require方法,它会以RequireJS的require方式返回。我尝试了一些不同的东西,包括在requirejs config中引用的init.js文件中设置nodeRequire: require
。有线索吗?感谢!!!