我理解module.export并要求mannner:
Requiring external js file for mocha testing@H_301_3@
尽管它是一个可用的模块,但我觉得这种方式是不方便的,因为我现在打算做的是测试文件中的一个代码.@H_301_3@
app.js@H_301_3@
'use strict'; console.log('app.js is running'); var INFINITY = 'INFINITY';
test.js@H_301_3@
var expect = require('chai').expect; require('./app.js'); describe('INFINITY',function() { it('INFINITY === "INFINITY"',function() { expect(INFINITY) .to.equal('INFINITY'); }); });
app.js正在运行@H_301_3@
然后@H_301_3@
ReferenceError:未定义INFINITY@H_301_3@
这不是我的预期.@H_301_3@
我不想使用module.export并写入@H_301_3@
var app = require(‘./ app.js’);@H_301_3@
和@H_301_3@
app.INFINITY和app.anyOtherValue为测试代码中的每一行.@H_301_3@
必须有一个聪明的方式.你可以告诉我吗?@H_301_3@
谢谢.@H_301_3@
解决方法
更新:最终答案:
我以前的答案是无效的,因为eval(code);对变量无效.@H_301_3@
http://nodejs.org/api/vm.html@H_301_3@
vm模块有许多已知问题和边缘情况.如果遇到问题或意外行为,请参阅GitHub上的公开问题.一些最大的问题如下所述.@H_301_3@
所以,虽然这在表面上起作用,但需要特别注意这样的目的,例如测试…@H_301_3@
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'); }) }); });