Ручной макет Jest всегда используется для запроса-обещания-родного, даже если jest.mock ('запрос-обещание-нативного') не используется в используемом тесте - PullRequest
0 голосов
/ 01 марта 2019

В моем тесте всегда используется фиктивный модуль «request-обещание-нативный», даже когда jest.mock («запрос-обещание-нативный») закомментирован.

Структура проекта следующая:

project
└───__mocks__
│   └───request-promise-native.js
└───node_modules
│   │   folder1
│   │   ...
│   └───request-promise-native
│   │   │   lib
│   │   │   ...
└───src
│   │   file1
│   │   ...
└───test
    └───sometest.test.js

В sometest.test.js я использую jest.mock("request-promise-native");, и это успешно использует фиктивную версию request-обещание-нативную (доказано с помощью console.log в фиктивной версии).

Когда я комментирую jest.mock("request-promise-native"); в sometest.test.js, фиктивная версия все еще используется ?!У меня сложилось впечатление, что для параметра jest automock по умолчанию установлено значение false, поэтому в нем должна использоваться актуальная версия модуля?

Чтобы попытаться понять все это, я установил для параметра autoock значение false в конфигурации.файл и он все тот же.

Единственный способ получить действительную версию, которую я могу использовать, - это заменить jest.mock("request-promise-native"); на jest.unmock("request-promise-native"); или переименовать request-promise-native.js в

Это ошибка с шуткой или моей установкой?У меня есть другие ручные макеты приватных модулей, и они ведут себя как положено: версия макета, используемая, когда jest.mock () присутствует, и оригинальная версия, используемая, когда jest.mock закомментировал.

Я нашел сообщение об ошибке для аналогичногопроблема https://github.com/facebook/jest/issues/1552 но, похоже, она уже давно решена.

Это происходит из-за того, что я пытаюсь смоделировать модуль в папке node_modules?

Любая помощь сэто было бы здорово, так как я хотел бы иметь возможность контролировать, какая версия модуля используется (макет для модульного теста, нормальный для интеграционных тестов), а также иметь уверенность в том, что проверенные модули используются только тогда, когда я использую jest.mock().

1 Ответ

0 голосов
/ 02 марта 2019

Jest ведет себя, как и ожидалось.

См. Модули узловых узлов :

Если модуль, над которым вы издеваетесь, является модулем узлов ...макет должен быть помещен в каталог __mocks__ рядом с node_modules ... и будет автоматически издеваться.Нет необходимости явно звонить jest.mock('module_name').

Так что да, вы совершенно правы.Узловые модули автоматически подвергаются мошенничеству, и это поведение отличается от пользовательских модулей или базовых модулей узла (например, fs или path), которые требуют вызова jest.mock.

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