Я новичок в Жасмин и только начал использовать его. У меня есть файл библиотеки JS с большим количеством функций, которые не связаны ни с одним объектом (то есть являются глобальными). Как мне следить за этими функциями?
Я пытался использовать окно / документ в качестве объекта, но шпион не работал, хотя функция была вызвана. Я также попытался обернуть его в поддельный объект следующим образом:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
и проверить с
expect(fakeElement.fakeMethod).toHaveBeenCalled();
Это не работает, так как шпион не работал
источник
test = jasmine.createSpy();
шпионил за angularJs$anchroScroll
работал отлично$window.open(url, '_blank');
с целью открытия новой вкладки (или окна в зависимости от настроек браузера). Как я должен быть уверен, что он вызывает эту функцию и проверяет, что она перемещается по нужному URL независимо от браузера?Пользователи TypeScript:
Я знаю, что ОП спрашивал о javascript, но для всех пользователей TypeScript, которые сталкиваются с этим и хотят следить за импортированной функцией, вот что вы можете сделать.
В тестовом файле преобразуйте импорт функции из этого:
К этому:
Тогда вы можете следить за
FooFunctions.foo
:)источник
export const FooFunctions = { bar, foo };
а импорт в тесте становитсяimport { FooFunctions } from '../foo_functions'.
Тем не менее, псевдоним по-прежнему необходимо явно использовать в частной реализации foo_functions, чтобы шпион работал.const result = FooFunctions.foo(params)
// шпион сообщает о звонкеconst result = foo(params)
// шпион сообщает, что не звонилError: <spyOn> : parseCookie is not declared writable or has no setter
Есть 2 альтернативы, которые я использую (для жасмина 2)
Это не совсем ясно, потому что кажется, что функция на самом деле является подделкой.
Второй более многословный, более явный и «чище»:
-> Исходный код жасмина, чтобы увидеть второй аргумент
источник
Очень простой способ:
источник
Это сработало для меня.
источник
Мой ответ немного отличается от @FlavorScape тем, что в импортированном модуле была одна функция (экспорт по умолчанию), я сделал следующее:
источник