jest.spyOn имеет 4 перегрузки, которые отделяют обычные поля (в этих перегрузках есть 3й параметр
'get' | 'set'
), методы (функциональный тип на инстансе) и static методы (функциональный тип на самом классе).
Ваш вызов подразумевает как раз метод.
Проблема в том, что private и protected поля не матчатся как функциональные типы. Приватные поля вообще не имеют типа за пределами класса, а protected имеют тип только в наследнике.
Остается только обмануть систему типов:
declare class ViewHack {
getPosOnScale(currentPos: number): number;
}
describe('some method', () => {
test('should return smth', () => {
const view = new View('range-slider', settings);
jest.spyOn(view as unknown as ViewHack, 'getPosOnScale').mockReturnValue(100);
});
});