Ответ 1
Проблема заключается в том, что вы просто перезаписываете свойство объекта window. И если вы можете это сделать, браузер может это сделать. Таким образом, издевательская функция или свойство глобального объекта, доступ к которому каждый может получить, не является хорошей идеей в целом, потому что вы никогда не можете быть уверены, что ваши изменения будут там, когда вы попытаетесь получить к ним доступ.
Что приводит меня к инъекции зависимостей. Его общий шаблон, чтобы сделать ваш блок кода проверяемым, с акцентом на unit. Что это значит. Когда вы создаете новый объект или получаете доступ к глобальному объекту, вы не только проверяете функциональность вашего подразделения, но также и функциональность вашего вновь созданного или глобального объекта. Чтобы добавить это, вы не создаете новые объекты в своем устройстве, а передаете их. Обычно вы должны это делать в конструкторе, но, как и в функции JavaScript, объекты с телом функции как конструктор, вы также можете передавать зависимости просто в свою функцию.
Таким образом, в вашем случае функция зависит от глобального объекта окна. Поэтому вместо того, чтобы пытаться получить доступ к глобальному объекту окна, передайте его в качестве параметра в свою функцию. Таким образом, вы можете передать объект окна в ваш производственный код и простой объект JavaScript с атрибутом аргумента в свой тест:
function youWannaTest(w){
console.log(w.arguments[0]);
}
В вашем вызове расширения функция, подобная этой:
youWannaTest(window);
В тестовом вызове выполните следующие действия:
youWannaTest({arguments: ['someValue']});