Я новичок в тестировании JavaScript и столкнулся с проблемой при попытке использовать sinon.js для отслеживания существующих функций.Использование sinon.js spy() для обертывания существующей функции
Скажем, у меня есть функция под названием
nsClientInfectionControlIndex.handleEditButton();
, который выглядит как
var nsClientInfectionControlIndex = {
showQtipError : function (message)
{
///<summary>Shows qTip error on edit button</summary>
///<param name="message">The text message to be displayed</param>
$("#editBtn").qtip(nsCBS.ErrorTip(message )).qtip("show");
},
goToEditPage : function (id)
{
/// <summary>Navigates browser window to edit page</summary>
/// <param name="id">The data-id (Client Infection Control Id) attribute from selected row</param>
var url = '/ClientInfectionControl/ClientInfectionControl/'
window.location.href = url + "?id=" + id;
},
handleEditButton: function() {
var id = $(".selectedRow").attr("data-id");
if (id != null) {
nsClientInfectionControlIndex.goToEditPage(id);
} else {
nsClientInfectionControlIndex.showQtipError("Please select a Client Infection Control Note first.");
}
},
};
Сейчас в моем test.js я использовал следующий код
var errorSpy = sinon.spy(nsClientInfectionControlIndex.showQtipError);
//Act
nsClientInfectionControlIndex.handleEditButton();
//Assert
equal(errorSpy.called, true, "test");
И тест не пройден (возвращает false), хотя я ожидал бы истинного, потому что вызывается nsClientInfectionControlIndex.showQtipError.
Хотя, насколько я понимаю документацию Sinon, я правильно слежу за своей функцией, включив функцию в конструктор. http://sinonjs.org/docs/#sinonspy
я могу заставить его работать правильно, если я подхожу Шпион таким образом,
var errorSpy = sinon.spy();
nsClientInfectionControlIndex.showQtipError = errorSpy;
//Act
nsClientInfectionControlIndex.handleEditButton();
//Assert
equal(errorSpy.called, true, "test");
Однако это заменяет оригинальную функциональность метода. Подхожу ли я к этому неправильно? Любая помощь будет оценена по достоинству.
Этот пример - беспорядок. подумайте над созданием чего-то более читаемого в следующий раз. – jhohlfeld