Я хотел бы знать, как правильно смоделировать метод экземпляра класса.
Допустим, у меня есть два класса:
class A {
doSomething() {
/* do something here. */
}
}
class B extends A {
doSomethingElse() {
this.doSomething() // calls doSomething
}
}
Теперь я пытаюсь написать модуль тесты на B#doSomethingElse
, и я не хочу вызывать A#doSomething
, поэтому мне нужно смоделировать этот метод экземпляра. Является ли это возможным? Я придумал следующее:
import B from './b'
let called = true
jest.mock('./a', () => {
class A {
public doSomething() {
called = true;
}
}
return {
__esModule: true,
A
};
});
describe('B', () => {
beforeEach(() => {
called = false
});
describe('doSomethingElse', () => {
const b = new B()
b.doSomethingElse()
expect(called).toEqual(true)
});
});
Как видите, я проверяю, правильно ли B#doSomethingElse
вызывает A#doSomething
. Это на самом деле работает, но это зависит от «глобальной» переменной (called
), которая меня как-то беспокоит. Есть ли лучший способ достичь того же результата?