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