Шпионить за глобальным объектом с помощью жасмина - PullRequest
0 голосов
/ 17 января 2019

Вот мой код JS

launchTask(taskId)
{
    const taskIds = window.external.MyObjectFactory("INDEXED");
    taskIds.add(taskId);
}

А вот как я пытаюсь создать шпиона и написать свою спецификацию для вышеупомянутой функции.

describe("The launchTask function", () => {
    beforeEach(() => {
        global.external.MyObjectFactory= jasmine.any(Function);
        spyOn(global.external, 'MyObjectFactory').and.callThrough();
        jasmine.createSpyObj("global.external.MyObjectFactory", ["add"]);
    });
    it("Scene 1", () => {
        launchTask(123);
        expect(global.external.MyObjectFactory).toHaveBeenCalledWith("INDEXED")
        expect(global.external.MyObjectFactory("INDEXED").add).toHaveBeenCalledWith(123)

    });

});

Первое ожидание проходит без каких-либо ошибок, тогда как второе ожидание дает мне ошибку "plan.apply не является функцией"

1 Ответ

0 голосов
/ 18 января 2019

Вы на самом деле не прикрепили функцию add() к MyObjectFactory. Попробуйте что-то вроде этого:

describe("The launchTask function", () => {
    let spyObj;
    beforeEach(() => {
        global.external.MyObjectFactory= jasmine.any(Function);
        spyObj = jasmine.createSpyObj(["add"]);
        spyOn(global.external, 'MyObjectFactory').and.returnValue(spyObj);
    });
    it("Scene 1", () => {
        launchTask(123);
        expect(global.external.MyObjectFactory).toHaveBeenCalledWith("INDEXED");
        expect(spyObj.add).toHaveBeenCalledWith(123);
    });
});
...