У меня есть макет модуля:
Observable.js
define([], function() {
const Observable = function(data) {
console.log('called'); /* <-- this is shown in console */
this.data = data;
};
return Observable;
});
Вызывается из моего файла myFuncs.js
createNewObservable: function(values) {
return new Observable(values);
},
Я пытаюсь проверить вот так:
describe('createNewObservable', () => {
it("calls Observable", () => {
window.Observable = Observable;
const observableSpy = spyOn(window, 'Observable');
myFuncs.createNewObservable(123);
expect(observableSpy).toHaveBeenCalled();
});
});
Шпион не вызывается и приводит к ошибке теста
Ожидаемый шпион
Как упоминалось выше, консольный журнал отображается так, что функция вызывается, я явно скрываю ее неправильно.
Как я могу следить за ним, чтобы иметь возможность захватить вызов?
Довольно интересный вопрос, как для меня.
Причина, по которой он не работает, потому что вы на самом деле не называете шпиона. Вы называете реально наблюдаемым из модуля. И я думаю, что вы не можете достичь того, чего хотите напрямую.
Но есть опция - вы можете изменить свою функцию createNewObservable, чтобы принять завод в качестве второго аргумента. Итак, результат будет как здесь (упрощенный)
describe('my test', () => {
const Observable = function (data) {
this.data = data;
};
function createNewObservable(values, observer = Observable) {
return new observer(values);
}
it("calls Observable", () => {
const spy = jasmine.createSpy();
createNewObservable(123, spy);
expect(spy).toHaveBeenCalled();
});
})
Надеюсь, это поможет, по крайней мере, немного
new whatever()
- оцените ответ, хотя