Jest: модули автозапуска, но только те, которые определены в __mocks__, а не все - PullRequest
0 голосов
/ 24 апреля 2020

TL; DR

Я хотел бы включить какую-то функцию automock, но только (и только!) Для модулей, которые я явно определил в соответствующем __mocks__ папка. Есть ли способ для этого в Jest?

Общие советы и предложения также приветствуются.

Немного контекста: (необязательно)

Оказывается, я совершенно не понял функцию Jests automock . Кстати, оглядываясь назад, я не понимаю, почему, потому что документы достаточно четко понимают, что на самом деле делает:

Эта опция говорит Jest, что все импортированные модули в вашем тесты должны быть проверены автоматически.

Как будто я только что заметил ключевое слово ALL . Может быть, я просто думал - но не имеет смысла иметь autoock даже для импортированной функции, которую я собираюсь протестировать здесь, не так ли? Как, очевидно, я хотел бы использовать сторонние компоненты из node_modules, но не мой собственный код. И получается, что:

Примечание. Узловые модули автоматически подвергаются насмешкам, когда у вас есть ручная насмешка (например, __mocks__/lodash.js).

Примечание. Основные модули, такие как fs, , по умолчанию не проверяются . Их можно явно высмеивать, как jest.mock('fs')

Так что это как бы противоположно тому, что я думал.

1 Ответ

0 голосов
/ 26 апреля 2020

Если я правильно понимаю, у вас есть определенные фиктивные файлы в вашей папке __mocks__, которые вы хотели бы заменить глобально, когда они необходимы в процессе импорта тестового файла.

У Jest есть средство настроить это. Если вы go просматриваете Jest Configuration Documentation, вы найдете свойство с именем moduleNameMapper, которое принимает объект с ключами, являющимися регулярными выражениями, и значениями, которые являются путями для макета для соответствующих модулей, соответствующих регулярному выражению.

В вашем jest.config.js вам нужно добавить отдельный параметр и указать шаблон макета и путь.

moduleNameMapper: {
    "/^bootstrap/": "<root>/tests/__mocks__/bootstrapMock.js",
    "/^axios/": "<root>/tests/__mocks/axiosMock.js"
}

Более подробную информацию об использовании можно найти в Jest docs .

Однако, если вы не хотите go через все это, этого также можно достичь, поместив папку __mocks__ рядом с вашей папкой node_modules. Однако, как определено в документации для Ручные mocks :

Если мы хотим смоделировать основные модули Node (например, fs или path), то явно вызовем, например, jest.mock ( 'path') требуется, потому что модули ядра Node по умолчанию не являются mock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...