Как исправить ‘TypeError: не удается переопределить свойство: origin’ в Jasmine

#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

Не удается переопределить свойства объекта window

Комментарии:

1. Изменение источника обычно запрещено, даже с использованием Object.defineProperty . Что вы могли бы сделать вместо этого, так это определить метод типа: function getOrigin() { return window.location.origin; } И использовать этот метод в своем коде. В тесте вы можете заглушить метод getOrigin , чтобы вернуть то, что вы хотите.

2. Спасибо @mgarcia, который сделал свое дело

Ответ №1:

Если вы пытаетесь сделать это ради тестов только в NodeJS, попробуйте переопределить его конструктор:

 Object.defineProperty(window.location.constructor.prototype, 'origin', {
   value: '',
   configurable: true,
}
  

Обратите внимание, что в браузерах это не выдаст ошибку, но также ничего не сделает.