Жасмин - шпионить за «новой myFunction ()» не вызывается

1

У меня есть макет модуля:

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();
    });
});

Шпион не вызывается и приводит к ошибке теста

Ожидаемый шпион

Как упоминалось выше, консольный журнал отображается так, что функция вызывается, я явно скрываю ее неправильно.

Как я могу следить за ним, чтобы иметь возможность захватить вызов?

Теги:
jasmine

1 ответ

0

Довольно интересный вопрос, как для меня.

Причина, по которой он не работает, потому что вы на самом деле не называете шпиона. Вы называете реально наблюдаемым из модуля. И я думаю, что вы не можете достичь того, чего хотите напрямую.

Но есть опция - вы можете изменить свою функцию 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();
    });

})

Надеюсь, это поможет, по крайней мере, немного

  • 0
    Хммм - интересный подход, но я действительно не хочу начинать модифицировать каждый метод в кодовой базе, который использует, например, new whatever() - оцените ответ, хотя
  • 0
    Да, именно поэтому я буду ждать другого ответа с интересом)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню