#javascript #angular #unit-testing #dom #jasmine
#javascript #angular #модульное тестирование #dom #jasmine
Вопрос:
У меня есть сценарий, в котором
if(window.location.origin){
//list of operations
}else{
//list of operations
}
Я пытаюсь присвоить значение window.location.origin, которое является readonly
свойством для целей модульного тестирования в Jasmine с использованием
Object.defineProperty(window.location, 'origin', {
value: '',
writable: true,
}
но я получаю ошибку TypeError: Cannot redefine property: origin
Я попробовал следующие решения, для jest
которых предлагается изменить jsdom
и использовать reconfigure
для изменения значения среды тестирования. Есть ли способ сделать это в jasmine? Я могу получить Env() using jasmine.getEnv()
для jasmine, но не могу его установить.
Не удается изменить окно.расположение с использованием Object.defineProperty
Комментарии:
1. Изменение источника обычно запрещено, даже с использованием Object.defineProperty . Что вы могли бы сделать вместо этого, так это определить метод типа:
function getOrigin() { return window.location.origin; }
И использовать этот метод в своем коде. В тесте вы можете заглушить метод getOrigin , чтобы вернуть то, что вы хотите.2. Спасибо @mgarcia, который сделал свое дело
Ответ №1:
Если вы пытаетесь сделать это ради тестов только в NodeJS, попробуйте переопределить его конструктор:
Object.defineProperty(window.location.constructor.prototype, 'origin', {
value: '',
configurable: true,
}
Обратите внимание, что в браузерах это не выдаст ошибку, но также ничего не сделает.