Как я могу отобразить диалоговое окно модульного теста jquery?

Я написал ниже код, попробуйте проверить, освобождается ли и отображается ли диалоговое окно jquery.

var jqueryMock = sinon.mock(jQuery);
var dialogExpectation = jqueryMock.expects("dialog");
dialogExpectation.once();

//call my function, in which create a jquery dialog.

equals(dialogExpectation.verify(), true, "Dialog is displayed");
jqueryMock.restore();   

Однако он показывает мне ошибку: Умер при тесте № 1: Попытка обернуть диалог неопределенного свойства как функцию - { "message": "Попытка обернуть диалог неопределенного свойства как функцию", "name": "TypeError" }

Код jquery очень прост:

displayMessage: function (message, title, hashId) { 

//some logic to build the message, title and hashId.  

 $(messageDiv).dialog({
            height: 240,
            width: 375,
            modal: true,
            title: title,
            resizable: false,
            buttons: [{
                text: localizedErrorMessages['OkText'],
                click: function () {
                    $(this).dialog("close");
                }
            }]             
        }); // end of dialog            
    } // end of displayMessage

Кто-нибудь знает, как издеваться над диалогом jquery и писать модульный тест в этом сценарии?


person user1342671    schedule 19.04.2012    source источник
comment
Для какой среды тестирования это?   -  person streetlight    schedule 21.02.2013


Ответы (2)


Вам нужно издеваться над jQuery.fn следующим образом:

var jQueryMock = sinon.mock(jQuery.fn);
person Papp Andras    schedule 20.04.2012

Я создал jsFiddle, чтобы продемонстрировать рабочий ответ.

function displayMessage(message, title, hashId) { 

     $("#message").dialog(); 
} 

test("dialog was called", function() {

    var jQueryMock = sinon.mock($.fn); // jQuery.fn and $.fn are interchangeable
    var dialogExpectation = jQueryMock.expects("dialog");
    dialogExpectation.once();

    //call my function, in which create a jquery dialog.
    displayMessage("new message", "title", 1);

    equal(dialogExpectation.verify(), true, "Dialog was not displayed");
    jQueryMock.restore();   
});

// This demonstrates a failing test - since the method actuall calls "dialog".
// It also demonstrates a more compact approach to creating the mock
test("toggle was called", function() {

    var mock = sinon.mock(jQuery.fn).expects("toggle").once();
    displayMessage("new message", "title", 1);

    equal(mock.verify(), true, "Toggle was never called");
});
person sfuqua    schedule 18.04.2014