如何模拟在函数外部实例化的常量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何模拟在函数外部实例化的常量?相关的知识,希望对你有一定的参考价值。

我有一个在函数外部实例化的常量,我希望对该函数进行单元测试。但我不希望每次更新该常量时都更新我的单元测试结果。有没有办法模拟那个常量并“告诉函数”使用模拟的而不是实际的常量?我宁愿不必创建一个返回该常量的新函数(我发现它是可能的)。

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')
})

我知道我可以将数据作为参数传递,但我不愿意,如果可能的话。谢谢您的帮助 !

答案

一种方法是出口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!
  });
});
另一答案

您可以通过将值分配给global变量来模拟它:

test('testing functionToTest', () => {
    global.data = [3, 4, 5];
   // continue the test
})

编辑

刚刚创建了一个简单的例子来展示如何声明全局变量:https://codesandbox.io/s/9q1x757my?fontsize=14

以上是关于如何模拟在函数外部实例化的常量?的主要内容,如果未能解决你的问题,请参考以下文章

PHP的静态及类中声明的常量

PL/SQL包(package)操作实例讲解

枚举器而不是类实例化的构造函数?

在Typescript中,如何在工厂(ish)函数中实例化的类上获取方法的通用返回类型

如何从片段外部清除/重置地图?

如何模拟 IOrganizationService