У меня есть базовый класс, который выглядит следующим образом.
class BaseClass {
.....
.....
async request(options) {
.......
.......
}
}
Это расширено другим классом, подобным этому.
const BaseClass = require('@myorg/base-class').BaseClass;
class MyClass extends BaseClass {
async method1() {
.............
request()
.............
}
async method2() {
.............
request()
.............
}
}
Теперь я использую jest для тестирования 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);
});
});
Проблема в том, что после инициализации макета я не могу сбросить и назначить другое значение, как во втором тесте. Как мне этого добиться?