Событие клика jQuery Jasmine: ожидаемое событие [object Object] должно быть запущено на [object Object]

У меня есть небольшой тест (Jasmine + jasmine-jquery), чтобы проверить, был ли нажат btn, и проверить, правильно ли были выполнены его обратные вызовы, но я сталкиваюсь с некоторыми странными ошибками:

Вот тест:

it("Check if pagination arrows/btns had been clicked", function() {
    // beforeEach to spy on callbacks:
    beforeEach(function() {
        spyOn(comp, "_pageUp");
    });

    var arrowUp = $('.arrow-up').eq(0);
    var spyEvent = spyOnEvent(arrowUp, 'click');

    // Trigger the event:
    $(arrowUp).click();

    expect('click').toHaveBeenTriggeredOn(arrowUp);
    expect(spyEvent).toHaveBeenTriggered();

    // Check if the click callback was correctly called:
    expect(comp._pageUp).toHaveBeenCalled();

});

Переменная comp является объектом JS. Я хочу, чтобы при нажатии кнопки $('.arrow-up').eq(0); вызывался метод _pageUp. После этого идут тесты этих методов (comp._pageUp() и comp._pageDown()).

У меня есть сообщение об ошибке:

    Expected event [object Object] to have been triggered on [object Object]

Кроме того, последнее напоминание: я почти уверен, что фикстура загружена и тест выполняется после события window.onload.

Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

Спасибо вам, ребята.


person ppalmeida    schedule 21.03.2016    source источник


Ответы (1)


ребята.

Как упоминалось здесь, основная проблема заключалась в подходе к прототипу.

Итак, исправив некоторые ошибки и объявление прототипа spyOn, у меня сработало следующее:

it("OverlayNavComponent pagination btn had been clicked", function() {
    // spyOn prototype BEFORE instantiate the component:
    spyOn(OverlayNavComponent.prototype, "_pageUp");
    var comp = new OverlayNavComponent();
    comp.init($("#scroll-up-icon"), $("#btn-toggle-menu"), 4);

    var btnId = "#scroll-up-icon";

    // spyOnEvent gets the query string and NOT the element itself as I was doing before:
    var spyEvent = spyOnEvent(btnId, "click");
    // Note: $(btnId).click() did not work:
    $(btnId).trigger("click");

    expect('click').toHaveBeenTriggeredOn(btnId);
    expect(spyEvent).toHaveBeenTriggered();
    expect(comp._pageUp).toHaveBeenCalled();
});

Кроме того, мне пришлось загрузить прибор внутри метода «beforeEach»:

beforeEach(function() {
    jasmine.getFixtures().fixturesPath = "/fixtures";
    loadFixtures('overlaynavcomp.html');
});

Сейчас все анализы в порядке.

person ppalmeida    schedule 31.03.2016