2015-04-22 2 views
0

Следующий фрагмент jasmine-jquery не работает. Ошибка, которую я получаю, - «Ожидаемый шпион logIt, который был вызван».Шпионаж на вызовы функции Jasmine-JQuery

var logIt = function() { 
    console.log("logged"); 
}; 

$('#id1').on({ 
    click: logIt 
}); 

describe("Clicking id1", function() { 
    it("logs to the console.", function() { 
     spyOn(window, 'logIt'); 
     $('#id1').click(); 
     expect(window.logIt).toHaveBeenCalled(); 
    }); 
}); 

//ERROR: "Expected spy logIt to have been called." 

ответ

1

Попробуйте это:

describe("Clicking id1", function() { 
    var logIt, $button; 

    beforeAll(function() { 
     logIt = jasmine.createSpy('logIt() spy'); 

     $button = $('#id1'); 
     $button.click(logIt); 
     $button.click(); 
    }); 

    it("logs to the console.", function() { 
     expect(logIt).toHaveBeenCalled(); 
    }); 
}); 

Я побежал тест ниже в моем проекте, и она работала:

describe("Clicking id1", function() { 
    var $button, specHelper, logIt; 

    beforeAll(function() { 
     logIt = jasmine.createSpy('logIt() spy'); 
     $button = $('<button>').attr("id", "id1"); 
     specHelper = new SpecHelper(); 
     specHelper.publish($button); 

     $button.click(logIt); 
     $button.click(); 
    }); 

    afterAll(function() { 
     specHelper.conceal($button); 
    }); 

    it("logs to the console.", function() { 
     console.dir(logIt); 
     expect(logIt).toHaveBeenCalled(); 
    }); 
}); 

specHelper.publish добавляет узел Jquery к DOM и specHelper.conceal удаляет его.

+0

Это генерирует тот же комментарий. – George

+0

Я протестировал адаптированную версию вышеуказанного кода, и это сработало для меня ... у вас есть элемент html с идентификатором id = "id1" на вашей странице jasmine-html? Если нет, это вызовет комментарий. – marcel

+0

OK - ваш работает, когда я добавил элемент с «id1». Но даже добавление элемента, мой оригинальный тест, который использует 'spyOn', терпит неудачу. Вы знаете, почему это так? – George