我遇到的问题是这样的:
1。)安装程序在beforeEach中
2。)尝试在个别测试中更改一些模拟行为,使其更具唯一性
3。)我无法更改在#1中设置的值
这是部分伪代码,因此语法可能已关闭,因为我没有前面的源码:
import Module from '../module';
...
jest.mock('../module');
describe('test suite', {
let mockFn = undefined;
beforeEach(() => {
mockFn = jest.fn(() => 'banana');
Module.function = mockFn;
});
test('happy test', () => {
// this test needs Module.function to return 'banana', so it doesn't
// have any issues, as calls to Module.function return 'banana'
});
test('test with issue', () => {
let mockFn2 = jest.fn(() => 'new value to return instead of banana');
Module.function = mockFn2;
//execute code
//calls to Module.function still return 'banana'
});
}
我已经尝试了一些事情,例如添加了一个调用嘲笑fn.mockClear()的afterEach函数。我无法覆盖原始的模拟功能。对于我的大多数测试,原始的模拟都很好,因为我想要一个默认值,但是我的一些测试中,我需要确保当这些函数返回某些值时,代码以某种方式做出反应,但是我不能从我分配的任何内容中进行更改作为第一个模拟功能。
编辑-使用方法如下:
function() {
...
if(Module.function().includes('somevalue'){
//Do something
}
else {
fetch(Module.function() + other stuff... )
...
}
};
这是它的定义方式:
export default class Module {
public static function() {
...
}
}
谢谢。
答案 0 :(得分:0)
我终于明白了。这不是一个非常有趣的解决方案。我只是意识到,在调用被测函数之后,我已经投入了所有逻辑来更改模拟程序。哎呀我想我花了两个小时尝试不同的方式来重置模拟,而没有意识到...