如何用Mocha测试全局变量?

问题描述:

使用Mocha进行测试时,如何加载foo.js以便foo-test.js可以测试诸如giveMeFive()之类的全局变量?如何用Mocha测试全局变量?

foo.js:

function giveMeFive() { 
    return 'High five!'); 
} 

FOO-test.js:

describe('#convertNumberToDollar()', function() { 
    it('should get a successful high five',() => { 
    assert.ok(giveMeFive() === 'High five!', ' successful high five.'); 
    }); 
}); 

这将是理想的,如果该解决方案可以通过竹被自动化。

+0

你在节点中运行摩卡吗?在这种情况下,你可以使用'require'(或者如果你使用Babel则使用'import') –

+0

即使giveMeFive()是全局的吗? –

+0

现在查看我的答案。 –

您可以使用import * as thisNameDoesntMatter from 'foo'或使用es5样式(在这种情况下更干净),require('foo'),并且该文件中定义的全局变量将在全局范围内可用。

举例来说,如果你定义以下JavaScript文件:

//test.js 

aGlobalVariable = 'someValue'; 

let aLocalVariable = 'anotherValue'; 

export default aLocalVariable; 

这是代码巴贝尔将产生(使用es2015预设和"node"环境):

//test-compiled.js 
'use strict'; 

Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 
global.aGlobalVariable = 'someValue'; 

var aLocalVariable = 'anotherValue'; 

exports.default = aLocalVariable; 

,你可以看,aGlobalVariable声明保存在模块中。由于整个编译后的文件将在导入时进行评估,因此无论何时导入此模块(如果选择"browser"环境,它将在window上定义),全局范围内都会提供aGlobalVariable。您不需要明确请求要导入的全局变量。

+0

嗨!感谢您的答复。我的问题是如何用Mocha测试全局变量?我如何加载包含全局变量的foo.js?我使用的遗留代码充满了许多全局文件。 –

+0

您可以像加载导出模块的文件一样加载文件。如果文件包含全局变量,这些全局变量将像往常一样在'global'(在Node中)或'window'(在浏览器中)对象上设置。我编辑了我的答案来解决这个问题。 –

+0

谢谢。我不知道导入*作为解决方案。根据我的需要,这并没有出于某种原因,但gulp-mocha-phantomjs帮助我在Node中运行我的Mocha html测试运行器。干杯! –