javascript - 使导入的函数使用新变量

标签 javascript node.js unit-testing

我正在尝试为我的一个旧应用程序编写一些单元测试。 那时我没想到我会想在主文件之外使用函数,所以我在其中使用了很多局部变量。我的问题是,在导入它们之后,他们试图使用来自其他范围的变量。有没有办法让他们在不更改旧文件的情况下使用新范围?

\\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'

我明白这可能是一个非常糟糕的做法,但那是一个旧代码,我现在不想乱用它。

最佳答案

你可以使用 rewire .它专为此类情况而设计:

let rewire = require('rewire')

let fooModule = rewire('../lib/foo.js')

fooModule.__set__('arr', [ 'bar' ])
console.log(fooModule.foo()) // bar

关于javascript - 使导入的函数使用新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48736663/

相关文章:

node.js - 在Nodejs中使用q(promises)模块时,then()返回的值是多少?

mysql - 生成一个 mysql 进程以使用 Node 导入数据库

javascript - 在 Jest 模拟模块工厂中模拟 promise

javascript - 无法在 react 中将 Prop 传递给子组件

动态输入中的javascript函数

node.js - 将流对象转换为字符串

unit-testing - 没有使用scalatra的Jetty的servlet错误的multipartconfig

php - 使用 PHP、JS/jQuery 和一点 AJAX 的 CRUD 方法

javascript - 打开数据库时 PhoneGap Windows Phone 8 IndexedDB AbortError

unit-testing - Chutzpah 和 Jasmine typescript 单元测试