Я только что начал тестирование QUnit и столкнулся с проблемой на моей первой странице: S
Мы используем ссылки на службы ASP.NET, чтобы воспользоваться асинхронной загрузкой данных на html-страницах, создаваяссылка на веб-сервис в том же проекте.За кулисами ASP.NET (элемент управления ScriptManager) создает файл JS, представляющий методы службы и обрабатывающий все вызовы AJAX.
Используя это, у меня есть страница, которая вызывает один из этих методов в документеСобытие .ready jQuery.Сейчас я пытаюсь протестировать этот js-файл с помощью QUnit, но избегайте, чтобы js-файл вызывал реальный веб-сервис и вместо этого использовал фиктивный сервис.Вот что у меня пока есть для попытки:
main.js (файл производственного кода)
var Service;
$(document).ready(function () {
//class definition created by asp.net behind the scenes
Service = MyProject.services.DataService;
//the method that calls the service
LoadData();
});
function LoadData() {
Service.GetData(OnGetDataSuccess, OnGetDataFailure);
}
main-test.js (тестовый код QUnit, ссылка на main.js приведена в этомстраница)
function SetupMockService(result) {
Service = { "GetData": function (OnSuccess, OnFailure) {
GetDataCalled = true;
OnSuccess(result);
//this is required in an asyncTest callback, I think?
start();
}, "GetDataCalled": false};
}
$(document).ready(function () {
module("LoadData");
asyncTest("LoadData should call GetData from service", function () {
SetupMockService(result);
LoadData();
equals(Service.GetDataCalled, true, "GetData has been called");
});
Этот тест не пройден.Метод LoadData вызывается как часть исходного события (main.js) document.ready, поэтому он по-прежнему вызывает производственный веб-сервис, и тесты не выполняются, поскольку переменная GetDataCalled никогда не устанавливается (или не определяется в рабочей среде).Я делаю asyncTest неправильно?(Это мой первый день с QUnit, так что я вполне могу быть)
Другой способ увидеть эту работу - я могу переопределить событие main.js document.ready, но я не совсемуверен, как это сделать.Я также не хочу добавлять проверки «testEnvironment == true» в мой производственный код main.js.