我有很多时间尝试使用 Mocha 和 RequireJS 设置 node/npm。这就是我所做的。
我创建了一个 testing/ 目录,结构如下:
testing/
|
+-- package.json
|
+-- README.md
|
+-- test/
|
+-- mocha.opts
|
+-- widgets/
|
+--mywidget/
|
+-- test.js
以下是每个相关文件包含的内容:
包.json:
{
"name":"testing-project",
"version":"2.5.0",
"description":"Testing Project",
"keywords":["test"],
"engines": { "node": ">= 0.7.0 < 0.11.0" },
"scripts" : {
"test": "./node_modules/.bin/mocha"
},
"devDependencies": {
"mocha": ">= 1.18.2",
"requirejs": ">= 2.1.11",
"should": ">= 3.2.0",
"expect.js": ">= 0.3.1"
}
}
测试/mocha.opts:
--require expect.js
--require should
--require requirejs
--require mocha
--reporter spec
--ui tdd
--recursive
--growl
测试/小部件/mywidget/test.js
'use strict';
var requirejs = require('requirejs');
// Also tried with: require('../../../r.js') which I downloaded from RequireJS' site
requirejs.config({
baseUrl: '../../../../',
nodeRequire: require
});
console.log('before require');
requirejs(['mywidget/trunk/src/mywidgetfile.js'], function(myObj){
console.log('after require');
var expect = require('expect.js');
// Instead of the above "requirejs['mywidget..." line, I've also tried:
// var myObj = requirejs('mywidget/trunk/src/mywidgetfile.js'); AND:
// var myObj = requirejs('../../../../mywidget/trunk/src/mywidgetfile.js');
describe('My Widget', function(){
describe('my-widget#getInfo', function(){
it('should pass this test', function(done){
expect( myObj.returnString('test') ).to.equal( 'test' );
done();
})
})
});
});
console.log('done');
它将在“需要之前”和“完成”输出控制台行,但只要我有 requirejs(['mywidget... 行,它就不会命中 after require。如果我删除 requirejs 行(和相应的右括号/括号行),而是使用直接“var myObj =”行,我得到“找不到模块”,如果我使用第二个“var myObj”行,我得到“参考错误:未定义定义”。
为了方便其他开发人员,我正在尝试使用 npm 打包这一切,以便我从顶部的“testing/”目录中运行命令“npm test”。
我一直在寻找答案并尝试了很多事情,但我似乎不需要使用 RequireJS 的文件并定义了“define()”。我可以执行测试,这不是问题......它只是试图将 RequireJS 插入到我开始遇到问题的组合中。
任何帮助都将是巨大的!
谢谢!