Ответ 1
Макет равен jest.fn. Вам нужно вызвать jest.fn, чтобы создать издеваемую функцию.
Итак, это:
jest.mock('./Service', () => jest.fn);
Должно быть:
jest.mock('./Service', () => jest.fn());
У меня есть класс обслуживания
Service.js
class Service {
}
export default new Service();
И я пытаюсь обеспечить макетную реализацию для этого. Если я использую что-то вроде этого:
jest.mock('./Service', () => { ... my mock stuff });
Он работает отлично, однако я не могу получить доступ к любым переменным, объявленным вне макета, что немного ограничивает, так как я хотел бы перенастроить то, что возвращает mock и т.д.
Я попробовал это (вдохновленный этой другой статьей StackOverflow: Служба, издевавшаяся с причинами Jest " Модуль factory для jest.mock() не имеет права ссылаться на любые out- переменные области видимости ")
import service from './Service';
jest.mock('./Service', () => jest.fn);
service.mockImplementation(() => {
return { ... mock stuff }
);
К сожалению, когда я пытаюсь запустить это, я получаю следующую ошибку:
TypeError: _Service2.default.mockImplementation is not a function
Макет равен jest.fn. Вам нужно вызвать jest.fn, чтобы создать издеваемую функцию.
Итак, это:
jest.mock('./Service', () => jest.fn);
Должно быть:
jest.mock('./Service', () => jest.fn());
Вам нужно сохранить свой издеваемый компонент в переменной с именем, предваряемым "mock", и убедиться, что вы возвращаете объект со свойством по умолчанию при импорте своей службы из значения по умолчанию в файл "main.js".
// Service.js
class Service {
}
export default new Service();
// main.test.js (main.js contains "import Service from './Service';")
const mockService = () => jest.fn();
jest.mock('./Service', () => {
return {
default: mockService
}
});
У меня была та же проблема, что и у @Janos, другие ответы тоже не помогли. Вы могли бы сделать две вещи:
1/Если вам нужно смоделировать только функцию из Сервиса, в вашем тестовом файле:
import service from './Service';
jest.mock('./Service', () => jest.fn());
service.yourFunction = jest.fn(() => { /*your mock*/ })
2/Если вам нужно смоделировать весь модуль:
Скажем, ваш service.js находится в javascript/utils, создайте javascript/utils/__ mocks__ и внутри него создайте файл service.js, после чего вы можете смоделировать весь класс в этом файле, например:
const myObj = {foo: "bar"}
const myFunction1 = jest.fn(() => { return Promise.resolve(myObj) })
const myFunction2 = ...
module.exports = {
myFunction1,
myFunction2
}
тогда в вашем тестовом файле вы просто добавляете:
jest.mock('./javascript/utils/service')
Функции, экспортированные из mockfile, будут проверены при выполнении вашего тестового файла.