gpt4 book ai didi

javascript - jest.mock 中的 Jest 'TypeError: is not a function'

转载 作者:行者123 更新时间:2023-12-04 14:22:39 27 4
gpt4 key购买 nike

我正在编写一个 Jest 模拟,但是在模拟本身之外定义一个模拟函数时我似乎遇到了问题。
我有一个类:

myClass.js

class MyClass {
constructor(name) {
this.name = name;
}

methodOne(val) {
return val + 1;
}

methodTwo() {
return 2;
}
}

export default MyClass;
以及使用它的文件:
testSubject.js

import MyClass from './myClass';

const classInstance = new MyClass('Fido');

const testSubject = () => classInstance.methodOne(1) + classInstance.name;

export default testSubject;
和测试:
testSubject.test.js

import testSubject from './testSubject';

const mockFunction = jest.fn(() => 2)

jest.mock('./myClass', () => () => ({
name: 'Name',
methodOne: mockFunction,
methodTwo: jest.fn(),
}))


describe('MyClass tests', () => {
it('test one', () => {
const result = testSubject()

expect(result).toEqual('2Name')
})
})
但是,我收到以下错误:

TypeError: classInstance.methodOne is not a function


如果我改为写:
...
methodOne: jest.fn(() => 2)
然后测试通过没有问题。
有没有办法在模拟本身之外定义这个?

最佳答案

就我而言,我不得不模拟一个 Node.js 模块。我正在使用 React 和 Redux在 ES6 中,使用 Jest 和 Enzyme 进行单元测试。
在我正在使用并为其编写测试的文件中,我将节点模块作为默认值导入:

import nodeModulePackage from 'nodeModulePackage';
所以我需要模拟它作为默认值,因为我不断收到错误 (0, _blah.default) is not a function. .
我的解决方案是:
jest.mock('nodeModulePackage', () => jest.fn(() => {}));
就我而言,我只需要重写该函数并使其返回一个空对象。
如果您需要调用该节点模块上的函数,您将执行以下操作:
jest.mock('nodeModulePackage', () => ({ doSomething: jest.fn(() => 'foo') }));

关于javascript - jest.mock 中的 Jest 'TypeError: is not a function',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51957794/

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