如何模拟在函数外实例化的常量?
How to mock a constant that is instantiated outside a function?
我有一个在函数外部实例化的常量,我希望对该函数进行单元测试。但是我不想每次更新那个常量时都更新我的单元测试结果。有什么方法可以模拟该常量并 "tell the function" 使用模拟的常量而不是实际的常量?我宁愿不必创建一个 returns 该常量(我发现这是可能的)的新函数。
utils.js
const data = [1, 2, 3]
const functionToTest = () => {
if (data.includes(2)) {
return true
}
return false
}
test.js
describe('testing functionToTest', () => {
const dataReplacement = [3, 4, 5]
tellFunctionToTest('hey, use dataReplacement instead of data')
})
我知道我可以将数据作为参数传递,但如果可能的话我宁愿不传递。感谢您的帮助!
您可以通过将值分配给 global
变量来模拟它:
test('testing functionToTest', () => {
global.data = [3, 4, 5];
// continue the test
})
编辑
刚刚创建了一个简单示例来展示如何声明全局变量:
https://codesandbox.io/s/9q1x757my?fontsize=14
一种方法是导出 data
并在 functionToTest
中使用导出:
code.js
exports.data = [1, 2, 3];
exports.functionToTest = () => exports.data.includes(2);
code.test.js
const assert = require('assert');
const code = require('./code');
describe('functionToTest', () => {
it('should work', () => {
code.data = [3, 4, 5];
assert(code.functionToTest() === false); // Success!
});
});
我有一个在函数外部实例化的常量,我希望对该函数进行单元测试。但是我不想每次更新那个常量时都更新我的单元测试结果。有什么方法可以模拟该常量并 "tell the function" 使用模拟的常量而不是实际的常量?我宁愿不必创建一个 returns 该常量(我发现这是可能的)的新函数。
utils.js
const data = [1, 2, 3]
const functionToTest = () => {
if (data.includes(2)) {
return true
}
return false
}
test.js
describe('testing functionToTest', () => {
const dataReplacement = [3, 4, 5]
tellFunctionToTest('hey, use dataReplacement instead of data')
})
我知道我可以将数据作为参数传递,但如果可能的话我宁愿不传递。感谢您的帮助!
您可以通过将值分配给 global
变量来模拟它:
test('testing functionToTest', () => {
global.data = [3, 4, 5];
// continue the test
})
编辑
刚刚创建了一个简单示例来展示如何声明全局变量: https://codesandbox.io/s/9q1x757my?fontsize=14
一种方法是导出 data
并在 functionToTest
中使用导出:
code.js
exports.data = [1, 2, 3];
exports.functionToTest = () => exports.data.includes(2);
code.test.js
const assert = require('assert');
const code = require('./code');
describe('functionToTest', () => {
it('should work', () => {
code.data = [3, 4, 5];
assert(code.functionToTest() === false); // Success!
});
});