我有一个基类,如下所示。
class BaseClass {
.....
.....
async request(options) {
.......
.......
}
}
这被另一个类似的类扩展。
const BaseClass = require('@myorg/base-class').BaseClass;
class MyClass extends BaseClass {
async method1() {
.............
request()
.............
}
async method2() {
.............
request()
.............
}
}
现在,我正在使用笑话来测试MyClass及其2种方法并模拟BaseClass,并尝试为其请求方法发送模拟的响应。由于我需要同时测试method1和method2,因此我需要在第一个之后更改模拟返回。我就是这样。
describe('MyClass', () => {
afterEach(() => {
jest.clearAllMocks();
jest.resetAllMocks();
});
let MockClass = class BaseClass {
request() {
return {
statusCode: 200,
body: JSON.stringify({
first_response: 'first_response'
})
};
}
};
const mock = jest.mock('@myorg/base-class', () => {
return {
BaseClass: MockClass
};
});
it('#method1 - test method one', async () => {
const myClass = require('../src').myClass;
const res = await myClass.method1();
expect(res).toEqual('first_response');
});
it('#method2 - test method 2', async () => {
mock.clearAllMocks();
mock.resetAllMocks();
MockClass = class BaseClass {
request() {
return {
statusCode: 200,
body: JSON.stringify({
random_response: 'random_response'
})
};
}
};
const myClass = require('../src').myClass;
const res = await myClass.method2();
expect(JSON.parse(res.body)).toEqual({
random_response: 'random_response'
});
expect(res.statusCode).toEqual(200);
});
});
问题在于,一旦模拟被初始化,我就无法像第二个测试一样重置并分配其他值。我该如何实现?
答案 0 :(得分:0)
一年前,我遇到了类似的问题。我有2个调用相同模拟方法的测试,但我希望有2个不同的输出。
Jest没有提供任何像样的方式来修改模拟,一旦创建,我想他们并没有改变。 (无法链接任何源,对不起,这是前一阵子。)
我有机会与一些经验丰富且有才华的程序员进行讨论,解决方法是在两个不同的文件中进行测试,并为该模拟程序提供2种实现。
简单,很干净,如果您多次遇到此问题,但如果必须经常执行,则不方便。
如果您有更好的解决方法或解决方法,请告诉我!
祝你好运