Поддельные / поддельные ссылки на службы ASP.NET и тестирование QUnit - PullRequest
0 голосов
/ 06 октября 2010

Я только что начал тестирование 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.

1 Ответ

0 голосов
/ 07 октября 2010

Оказывается, у меня были вещи немного задом наперед, а также одна очевидная ошибка. Вот результирующий код, который работает

Основные-tests.js

//the test itself isn't calling async methods, so it doesn't need to use asyncTest
test("LoadData should call GetData from service", function () {
    SetupMockService();
    LoadData();
    equals(Service.GetDataCalled, true, "GetData has been called");
});

function SetupMockService() {
    //redefining the Service variable specified in main.js with a mock object
    Service = { "GetData": function (OnSuccess, OnFailure) {
            //I forgot the "this" part... d'oh!
            this.GetDataCalled = true;
        }, "GetDataCalled": false
    };
}

Это по-прежнему не решает проблему с выполнением исходного кода document.ready в файле main.js, но я это выясню.

...