当前位置: 首页 > 面试题库 >

如何在玩笑中模拟导出的const

甄正信
2023-03-14
问题内容

我有一个依赖于导出const变量的文件。此变量设置为,true但是如果需要,可以将其设置为false手动设置,以防止下游服务请求时出现某些行为。

我不确定如何const在Jest中模拟变量,以便更改测试truefalse条件的值。

例:

//constants module
export const ENABLED = true;

//allowThrough module
import { ENABLED } from './constants';

export function allowThrough(data) {
  return (data && ENABLED === true)
}

// jest test
import { allowThrough } from './allowThrough';
import { ENABLED } from './constants';

describe('allowThrough', () => {
  test('success', () => {
    expect(ENABLED).toBE(true);
    expect(allowThrough({value: 1})).toBe(true);
  });

  test('fail, ENABLED === false', () => {
    //how do I override the value of ENABLED here?

    expect(ENABLED).toBe(false) // won't work because enabled is a const
    expect(allowThrough({value: 1})).toBe(true); //fails because ENABLED is still true
  });
});

问题答案:

如果将ES6模块语法编译为ES5,则此示例将起作用,因为最后,所有模块导出都属于同一对象,可以对其进行修改。

import { allowThrough } from './allowThrough';
import { ENABLED } from './constants';
import * as constants from './constants';

describe('allowThrough', () => {
    test('success', () => {
        constants.ENABLED = true;

        expect(ENABLED).toBe(true);
        expect(allowThrough({ value: 1 })).toBe(true);
    });

    test('fail, ENABLED === false', () => {
        constants.ENABLED = false;

        expect(ENABLED).toBe(false);
        expect(allowThrough({ value: 1 })).toBe(false);
    });
});

另外,您可以切换到raw commonjs require函数,并借助以下方法做到这一点jest.mock(...)

const mockTrue = { ENABLED: true };
const mockFalse = { ENABLED: false };

describe('allowThrough', () => {
    beforeEach(() => {
        jest.resetModules();
    });

    test('success', () => {
        jest.mock('./constants', () => mockTrue)
        const { ENABLED } = require('./constants');
        const { allowThrough } = require('./allowThrough');

        expect(ENABLED).toBe(true);
        expect(allowThrough({ value: 1 })).toBe(true);
    });

    test('fail, ENABLED === false', () => {
        jest.mock('./constants', () => mockFalse)
        const { ENABLED } = require('./constants');
        const { allowThrough } = require('./allowThrough');

        expect(ENABLED).toBe(false);
        expect(allowThrough({ value: 1 })).toBe(false);
    });
});


 类似资料:
  • 我有下面的打字稿类,我想测试在笑话。 这是我的测试: 如何模拟MyClass中使用的foo函数,以使测试通过?

  • 问题内容: 首先,我是和的新手。 我有一个实例化的类,我想测试一下。 这是我的代码: 我想测试一下我的功能。我的头,我认为测试fs.existsSync的状态是个好主意。如果返回,则必须调用。所以我尝试写一些测试: 但是,我有一个错误: 您能帮我调试和测试我的功能吗? 问候。 问题答案: 出现错误是因为它正在寻找在您的对象上调用的方法,该方法不存在。如果您可以访问测试中的模块,则可以监视如下方法:

  • 问题内容: 我想嘲笑localStorage方法以进行错误模拟。我在Utility.js中定义了localstorage getter和setter方法。我想嘲笑在调用时抛出错误。 开玩笑, 但是模拟永远不会被调用。我也尝试过 问题答案: 这与Andreas在答案中建议的一致,但是我能够使用Storage接口对其进行模拟。我做了这样的事情 开玩笑, 这次公关讨论也很有帮助。

  • 问题内容: 我在带有打字稿的React Router v5.1.2中使用UseHistory挂钩吗?运行单元测试时,我遇到了问题。 TypeError:无法读取未定义的属性“ history”。 我也尝试使用,但仍然无法正常工作。 问题答案: 浅化使用的反应功能组件时,我需要相同的内容。 在我的测试文件中解决了以下模拟问题:

  • 问题内容: 我有一个React组件(为了演示该问题,对此进行了简化): 现在,我要测试提供的值的调用。 为此,我想创建一个代替组件方法的笑话模拟函数。 到目前为止,这是我的测试用例: 但是我在控制台中得到的只是: 语法错误 所以我的问题是,如何正确地用酶模拟组分方法? 问题答案: 可以通过以下方式模拟该方法: 您还需要在被测组件的包装器上调用.update,以便正确注册模拟功能。 语法错误来自错误

  • 问题内容: 我是开玩笑/酶的新手,正尝试模拟对返回Promise的aync函数的调用,该调用是在componentDidMount方法的react组件内进行的。 该测试正在尝试测试componentDidMount将Promise返回的数组设置为状态。 我遇到的问题是,在将数组添加到状态之前,测试已完成并通过。我正在尝试使用“完成”回调来使测试等待,直到承诺解决为止,但这似乎不起作用。 我尝试将E