gpt4 book ai didi

javascript - 如何处理模块和 typescript 类型的 Jest 模拟功能

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:28 24 4
gpt4 key购买 nike

我使用 ts-jestjest 用 typescript 编写我的测试文件。

我很困惑如何输入模块的模拟函数。

这是我的代码:

./module.ts:

import {IObj} from '../interfaces';

const obj: IObj = {
getMessage() {
return `Her name is ${this.genName()}, age is ${this.getAge()}`;
},

genName() {
return 'novaline';
},

getAge() {
return 26;
}
};

export default obj;

./module.test.ts:

import * as m from './module';

describe('mock function test suites', () => {

it('t-1', () => {
// I think the jest.Mock<string> type here is not correct.
m.genName: jest.Mock<string> = jest.fn(() => 'emilie');
expect(jest.isMockFunction(m.genName)).toBeTruthy();
expect(m.genName()).toBe('emilie');
expect(m.getMessage()).toEqual('Her name is emilie, age is 26');
expect(m.genName).toHaveBeenCalled();

});

});

如何输入模块m的模拟函数genName

typescript 在这里给我一个错误:

Error:(8, 7) TS2540:Cannot assign to 'genName' because it is a constant or a read-only property.

最佳答案

这就是我解决相同问题的方式,也是我现在进行所有模拟和监视的方式。

import * as m from './module';

describe('your test', () => {
let mockGenName;

beforeEach(() => {
mockGenName = jest.spyOn(m,
'genName').mockImplemetation(() => 'franc');
})

afterEach(() => {
mockGenName.mockRestore();
})


test('your test description', () => {
// do something that calls the genName function
expect(mockGenName).toHaveBeenCalledTimes(1);
})

})

使用此设置,您可以通过编程方式更改不同测试的模拟的实现,然后断言该函数已被调用以及调用它的原因,同时在测试之间和所有测试之后清除您的模拟。

关于javascript - 如何处理模块和 typescript 类型的 Jest 模拟功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44941701/

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