\\foo.js
let arr
exports.foo = function foo() {
return arr[0]
}
\\foo.test.js
let arr = ['bar']
let foo = require('../test/supreme.spec.js').foo
console.log(foo())//undefined, want 'bar'
我明白这可能是一个非常糟糕的做法,但这是一个旧代码,我现在不想乱用它。
答案 0 :(得分:2)
您可以使用rewire。它是专门为这种情况设计的:
let rewire = require('rewire')
let fooModule = rewire('../lib/foo.js')
fooModule.__set__('arr', [ 'bar' ])
console.log(fooModule.foo()) // bar
答案 1 :(得分:0)
不幸的是,由于函数的闭包和词法环境这样的事情,它是不可能的。该功能记得'与创建的范围相同的所有变量,因此除非它们是该函数的属性,否则它们无法从外部访问。这就是使面向对象的Javascript中的封装成为可能的原因。
答案 2 :(得分:0)
范围与模块隔离,但您可以添加具有默认值的参数。
exports.foo = function foo(arr = ['test data 1', 'test data 2']) {
return arr[0]
}
然后可以将其称为foo()
,也可以称为foo(['other data'])
。