Javascript 如何正确要求mocha.opts文件中的模块
我在mocha单元测试中使用expect.js库。目前,我要求在每个文件的第一行使用库,如下所示:Javascript 如何正确要求mocha.opts文件中的模块,javascript,node.js,gulp,mocha.js,require,Javascript,Node.js,Gulp,Mocha.js,Require,我在mocha单元测试中使用expect.js库。目前,我要求在每个文件的第一行使用库,如下所示: var expect = require('expect.js'); describe('something', function () { it('should pass', function () { expect(true).to.be(true); // works }); }); 如果可能,我想从每个文件的第一行删除样板文件require code,让
var expect = require('expect.js');
describe('something', function () {
it('should pass', function () {
expect(true).to.be(true); // works
});
});
如果可能,我想从每个文件的第一行删除样板文件require code,让我的单元测试神奇地了解expect
。我想我可以使用以下文件来完成此操作:
但现在我在运行测试时遇到以下错误:
ReferenceError:未定义expect
这似乎有道理——它怎么知道我的测试中对expect
的引用是指expect.js库导出的内容
expect库肯定正在加载,好像我将路径更改为不存在的东西,然后mocha说:
“错误:找不到模块”“/不存在。js”
有什么方法可以实现我想要的吗?如果可能有帮助的话,我将从一个“吞咽”任务中运行测试。您正确地要求模块,但正如您所理解的,模块导出的符号不会自动进入全局空间。您可以使用自己的帮助器模块解决此问题 创建
test/helper.js
:
var expect = require("expect.js")
global.expect = expect;
并将您的test/mocha.opts
设置为:
--require test/helper
虽然Louis的答案是正确的,但最后我通过使用karma和插件用不同的方法解决了这个问题: 安装:
npm install karma-chai --save-dev
配置:
karma.set({
frameworks: ['mocha', 'chai']
// ...
});
使用:
多亏了Louis answer和一些闲逛,我使用mocha.opts整理了我的测试环境参考。这是完整的设置 我的项目是一个遗留JavaScript应用程序,其中包含许多“普通”js文件,我希望在使用脚本标记的html文件中引用这些文件,并在使用mocha进行单元测试时使用require 我不确定这是否是一个好的实践,但我已经习惯于在node项目中使用Mocha进行单元测试,并且渴望以最小的适应性使用相同的工具 我发现出口很容易:
class Foo{...}
class Bar{...}
if (typeof module !== 'undefined') module.exports = { Foo, Bar };
或
但是,尝试在所有文件中使用require是一个问题,因为浏览器会抱怨变量已经声明,即使包含在if块中,例如:
if (typeof require !== 'undefined') {
var {Foo,Bar} = require('./foobar.js');
}
因此,我去掉了文件中的require部分,并在我的测试文件夹中设置了一个mocha.opts文件,其中包含此内容。路径相对于根文件夹:
--require test/mocha.opts.js
mocha.opts.js内容。路径相对于文件的位置:
global.assert = require('assert');
global.Foo = require("../foobar.js").Foo;
global.Bar = require("../foobar.js").Bar;
global.Buzz = require("../buzz.js");
if (typeof require !== 'undefined') {
var {Foo,Bar} = require('./foobar.js');
}
--require test/mocha.opts.js
global.assert = require('assert');
global.Foo = require("../foobar.js").Foo;
global.Bar = require("../foobar.js").Bar;
global.Buzz = require("../buzz.js");