Мне нужно создать ложные реализации моих классов машинописи, используя jest v24 +.Я специально пытаюсь создать фиктивный класс, который вставляется в конструктор и макетировать функции, которые будут вызываться для возврата определенного ответа.
Как создать макет для каждого теста?
Дополнительная информация:
Я запустил новый проект и сейчас использую jest v24, что создало проблему с написанием тестов, которые мне не удалось решить.
ИспользованиеНиже приведен пример с jest v23, ранее я мог смоделировать класс Randomiser следующим образом:
const Mock = jest.fn<Randomiser>(() => ({
getRandom: jest.fn().mockReturnValue(10)
}));
, который успешно компилируется и компилируется.
Начиная с v24 функция fn принимает и сложение generic <T, Y extends any[]>
Я не знаю, имеет ли это отношение к изменению поведения, но теперь я получаю сообщение об ошибке:
Отсутствует свойство 'rand' в типе '{getRandom: Mock;} 'но требуется в типе' Randomiser'.ts (2741)
import "jest";
class Randomiser {
public getRandom(): number {
return this.rand();
}
private rand(): number {
return Math.random();
}
}
class Multiplier {
private randomiser: Randomiser;
constructor(randomiser: Randomiser) {
this.randomiser = randomiser;
}
multiplyRandom(factor: number): number {
return Math.floor(this.randomiser.getRandom() * factor);
}
}
describe("tests", () => {
it("10 x 2 = 20", () => {
const Mock = jest.fn<Randomiser, any>(() => ({
getRandom: jest.fn().mockReturnValue(10),
rand: jest.fn() //with this line I get an error because it should be private, without this line I get the error above.
}));
expect(new Multiplier(new Mock()).multiplyRandom(2)).toBe(20);
})
})
Я ожидал, что смогу написать мои макеты так же, как я был с v23, то есть я мог издеваться нади нужно только имитировать функции, которые я собирался вызвать.
Теперь мне нужно смоделировать все функции, включая частные функции и частные свойства, на которые он потом жалуется, не являются личными.