我有一个基类,如下所示。
class BaseClass {
.....
.....
async request(options) {
.......
.......
}
}这是由另一个类似这样的类扩展的。
const BaseClass = require('@myorg/base-class').BaseClass;
class MyClass extends BaseClass {
async method1() {
.............
request()
.............
}
async method2() {
.............
request()
.............
}
}现在,我使用jest测试MyClass及其两个方法,模拟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);
});
});问题是,一旦mock被初始化,我就不能像在第二个测试中那样重置和分配不同的值。我怎样才能做到这一点呢?
发布于 2020-01-11 03:00:11
一年前我也遇到过类似的问题。我有两个测试调用相同的模拟方法,但我希望有两个不同的输出。
Jest没有提供任何合适的方法来修改创建的mock,我想他们也没有改变这一点。(无法链接任何来源,对不起,这是一段时间之前)。
我有机会与一些经验丰富、才华横溢的程序员讨论,解决办法是在两个不同的文件中进行测试,其中有两个模拟实现。
如果你经常遇到这个问题,那就很简单,很干净,但如果你必须经常这样做,那就不方便了。
如果您有更好的解决办法或解决方法,请让我知道!
祝好运
https://stackoverflow.com/questions/59684793
复制相似问题