Один из вариантов - это внедрение зависимостей: разрешить передачу location
(или, возможно, даже search
) в качестве опоры для вашего компонента.По умолчанию вы можете задать для пропеллера значение window.location
и в тесте пройти определенное значение.Однако тогда вы не проверяете правильность значения по умолчанию:).
Так что если вы хотите проверить, что ваша функция извлекает значение из window.location, это немного сложнее.Более старые версии jsDOM (7 и более ранние) позволяли вам определять свойства местоположения следующим образом:
// somewhere in test setup
Object.defineProperty(window.location, 'search', {
writable: true,
value: 'query=true'
});
Но теперь jsDOM не позволяет вам этого делать (начиная с jest 22+).Однако есть альтернатива.Вы можете использовать свойство конфигурации testURL
jest, чтобы задать URL для всех тестов, но это не сработает, если ваши тесты когда-либо будут нуждаться в другой конфигурации.Но если вы используете API pushState, то это может быть использовано для установки URL:
window.history.pushState({}, 'Test Title', '/test.html?query=true')
Это может иметь предостережения, хотя, если другие вещи заботятся о API истории, но, вероятно, работает в вашем случае.
Идеальный способ - использовать jsdom.reconfigure
для установки URL-адреса, но экземпляр jsdom, используемый jest, не легко доступен ...
Ссылки: