我理解module.export并要求mannner:
Requiring external js file for mocha testing
尽管它是一个可用的模块,但我觉得这种方式是不方便的,因为我现在打算做的是测试文件中的一个代码.
app.js
'use strict'; console.log('app.js is running'); var INFINITY = 'INFINITY';
test.js
var expect = require('chai').expect; require('./app.js'); describe('INFINITY',function() { it('INFINITY === "INFINITY"',function() { expect(INFINITY) .to.equal('INFINITY'); }); });
app.js正在运行
然后
ReferenceError:未定义INFINITY
这不是我的预期.
我不想使用module.export并写入
var app = require(‘./ app.js’);
和
app.INFINITY和app.anyOtherValue为测试代码中的每一行.
必须有一个聪明的方式.你可以告诉我吗?
谢谢.
解决方法
更新:最终答案:
我以前的答案是无效的,因为eval(code);对变量无效.
幸运的是,节点有一个强大的方法 – 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'); }) }); });