13 javascript unit-testing require mocha.js node.js
我理解module.export和require管理者:
虽然它是可用的,只要它是一个模块,我觉得这种方式很不方便,因为我现在打算做的是测试文件中的代码.
例如,我在文件中有一个代码:
app.js
'use strict';
console.log('app.js is running');
var INFINITY = 'INFINITY';
Run Code Online (Sandbox Code Playgroud)
现在,我想在一个文件中测试这段代码:
test.js
var expect = require('chai').expect;
require('./app.js');
describe('INFINITY', function()
{
it('INFINITY === "INFINITY"',
function()
{
expect(INFINITY)
.to.equal('INFINITY');
});
});
Run Code Online (Sandbox Code Playgroud)
测试代码执行app.js,因此输出为;
app.js is running
然后
ReferenceError: INFINITY is not defined
这不是我的预期.
我不想用module.export和写的一样
var app = require('./app.js');
和
app.INFINITY并且app.anyOtherValue对于测试代码中的每一行.
必须有一个聪明的方法.你可以告诉我吗?
谢谢.
小智 14
更新:最终答复:
我以前的答案无效,因为eval(code);它对变量没用.
幸运的是,node有一个强大的方法 -vm
但是,根据文件,
vm模块有许多已知问题和边缘情况.如果您遇到问题或意外行为,请参阅GitHub上的未解决问题.一些最大的问题如下所述.
所以,虽然这在表面上起作用,但需要额外注意这样的目的,比如测试......
var expect = require('chai')
.expect;
var fs = require('fs');
var vm = require('vm');
var path = './app.js';
var code = fs.readFileSync(path);
vm.runInThisContext(code);
describe('SpaceTime', function()
{
describe('brabra', function()
{
it('MEMORY === "MEMORY"',
function()
{
expect(MEMORY)
.to.equal('MEMORY');
})
});
});
Run Code Online (Sandbox Code Playgroud)
毕竟; 我在这种情况下找到的最好的方法是在同一个文件中编写测试mocha代码.
我通常包括一个_test对象,该对象包含对所有“私有”内部变量和函数的引用,并在导出时公开它。在您的情况下:
./app.js
var INFINITY = 'infinity';
function foo() {
return 'bar';
}
exports._test = {
INFINITY: INFINITY,
foo: foo
}
Run Code Online (Sandbox Code Playgroud)
./test/app-test.js
var INFINITY = 'infinity';
function foo() {
return 'bar';
}
exports._test = {
INFINITY: INFINITY,
foo: foo
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19933 次 |
| 最近记录: |