Тестирование javascript внутри IIFE

Руководитель моей группы хочет, чтобы я обернул свой js-код внутри выражения функции, вызываемого немедленно IIFE. Я не могу понять, как шпионить в моем файле спецификации жасмина.

Как бы я шпионил за следующим:

(function(){
function_1(){...}
function_2(){...}
});

spyOn(window,'function_1') не работает. Передача окна в IIFE не работает.

Попытка (x=function()... и (function x() ..., а затем spyOn(x,'function_1') тоже не работает.

Я ничего не мог найти в Интернете об этом.


person user29998    schedule 05.06.2014    source источник
comment
Вот решение для решения этой проблемы без spyOn() stackoverflow.com/questions/27561337/   -  person jfab fab    schedule 19.12.2014


Ответы (1)


@user29998 user29998, если вы можете предоставить эти функции для тестирования через блок return, вы можете сделать что-то, что можно найти по этой ссылке jsbin: http://jsbin.com/yohux/1/edit?js,console

введите здесь описание изображения

person d48    schedule 05.06.2014
comment
Я должен был уточнить это в своем вопросе (сделаю правку). Я хочу запустить тест из внешнего файла (файл спецификации жасмина). Я не могу это работать для меня на внешнем файле спецификации жасмина. - person user29998; 05.06.2014
comment
Точно так же, как var i внутри функции недоступно вне этой функции, содержимое IIFE одинаково. Если вы не можете редактировать исходный код/свою собственную копию исходного кода, вы не сможете просмотреть эти внутренние компоненты. Тем не менее, если вы можете получить доступ к исходному коду через код без интерпретации, вы всегда можете изменить его на лету, прежде чем он будет вызван. Это маловероятно, если ваш домен не включен в CORS. - person Paul S.; 06.06.2014
comment
природа IIFE заключается в том, чтобы инкапсулировать эти переменные/функции. Если они никоим образом не выставлены и не должны быть выставлены, они, по сути, не могут быть протестированы внешним средством запуска тестов. Я бы спросил вашего руководителя группы, как они это делают на практике, чтобы они могли показать вам. Опубликуйте их ответ здесь - person d48; 06.06.2014