2016-01-06 4 views
1

Мы используем require и Browserify, поэтому модули одной функции импортируются как это:Использование жасмин для `spyOn` функцию в (разные) закрытия

var loadJson = require('../loadJson'); 

и использовать так:

x = loadJson(url); 

Я хотел бы spyOn, что loadJson функция, но это кажется невозможным.

Это не глобальная функция, так что это не работает:

spyOn(window, 'loadJson') 

Это не локальная функция, так что это не работает:

loadJson = createSpy('loadJsonSpy', loadJson).and.callThrough(); 

Когда я require модуль в моя спецификация Jasmine, функция видна внутри этого закрытия, но это не то же самое закрытие, что и другой модуль, который фактически использует loadJson для реального.

Таким образом, в общем, я думаю, что это не возможно использовать spyOn в данном случае - это правильно? Любые творческие обходные пути?

+0

Ох. http://philipwalton.com/articles/how-to-unit-test-private-functions-in-javascript/ –

+0

Эта ссылка предназначена для тестирования частных функций. '' 'loadJson''' не является частной функцией в вашем случае. –

+0

Вы уверены? Это особенно касается функций тестирования в рамках закрытий - это просто называет их «частными функциями». –

ответ

0

Если loadJson - однотонный, то вы можете это сделать.

var functionsToSpyOn = {loadJson: loadJson} 
spyOn(functionsToSpyOn, 'loadJson') 

Это обходной путь, который я использовал, когда у меня была та же проблема.

Смежные вопросы