Как проверить супер звонки при использовании Typescript с Jest?
Скажем, у меня есть класс, который структурирован так:
// Some class that calls super.get() and adds an additional param
export default class ClassB extends ClassA {
private foo: string;
constructor(params) {
super(params);
this.foo = 'bar';
}
public async get(params?: { [key: string]: any }): Promise<any> {
return super.get({
foo: this.foo,
...params,
});
}
}
Я хотел бы проверить, что super.get() вызывался с предоставленными параметрами, а также с дополнительным {foo: 'bar'}.
import ClassA from '../../src/ClassA';
import ClassB from '../../src/ClassB';
jest.mock('../../src/ClassA');
jest.unmock('../../src/ClassB');
describe('ClassB', () => {
describe('get', () => {
beforeAll(() => {
// I've tried mock implementation on classA here but didn't have much luck
// due to the extending not working as expected
});
it('should get with ClassA', async () => {
const classB = new ClassB();
const response = await classB.get({
bam: 'boozled',
});
// Check if classA fetch mock called with params?
});
});
});
Как я могу проверить, что classA.fetch действительно вызывался с ожидаемыми параметрами?
Я делаю что-нибудь, что просто неправильно?
Спасибо за любую помощь!
0 ответов
Вы можете сделать это, следя за prototype
расширенного класса, что-то вроде этого:
const classASpy = jest.spyOn(ClassA.prototype, 'get');
classB.get(param)
expect(classASpy).toHaveBeenCalledWith(param);
Надеюсь, это поможет!