gpt4 book ai didi

unit-testing - 当模块未模拟时,如何在 Jest 中模拟导入的命名函数

转载 作者:行者123 更新时间:2023-12-03 05:35:45 25 4
gpt4 key购买 nike

我正在尝试在 Jest 中测试以下模块:

// myModule.js

export function otherFn() {
console.log('do something');
}

export function testFn() {
otherFn();

// do other things
}

如上所示,它导出一些命名函数,重要的是 testFn 使用 otherFn

在 Jest 中,当我为 testFn 编写单元测试时,我想模拟 otherFn 函数,因为我不希望 otherFn< 中出现错误 影响我的 testFn 单元测试。我的问题是我不确定最好的方法:

// myModule.test.js
jest.unmock('myModule');

import { testFn, otherFn } from 'myModule';

describe('test category', () => {
it('tests something about testFn', () => {
// I want to mock "otherFn" here but can't reassign
// a.k.a. can't do otherFn = jest.fn()
});
});

感谢任何帮助/见解。

最佳答案

使用jest.requireActual()里面jest.mock()

jest.requireActual(moduleName)

Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not.

示例

我更喜欢这种简洁的用法,您需要并在返回的对象中传播:

// myModule.test.js

import { otherFn } from './myModule.js'

jest.mock('./myModule.js', () => ({
...(jest.requireActual('./myModule.js')),
otherFn: jest.fn()
}))

describe('test category', () => {
it('tests something about otherFn', () => {
otherFn.mockReturnValue('foo')
expect(otherFn()).toBe('foo')
})
})

Jest 的手动模拟文档中也引用了此方法(Examples 末尾附近):

To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using jest.requireActual(moduleName) in your manual mock and amending it with mock functions before exporting it.

关于unit-testing - 当模块未模拟时,如何在 Jest 中模拟导入的命名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com