Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确要求mocha.opts文件中的模块_Javascript_Node.js_Gulp_Mocha.js_Require - Fatal编程技术网

Javascript 如何正确要求mocha.opts文件中的模块

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,让

我在mocha单元测试中使用expect.js库。目前,我要求在每个文件的第一行使用库,如下所示:

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");