Тестовете на Qunit не работят на Visual Studio 2012, тъй като работят на браузър

Разработих SPA приложение, използвайки knockout и breeze, използвах qunitJS за модулно тестване, което работи добре в браузър за моя проект. Наскоро намерих плъгин "Chutzpah" за VS2012, който може да работи добре за тестване на qunit, който може да проверява тестовите случаи и да отговаря за теста, въпреки че използвам breeze, моите тестови случаи включват:

  1. Създаване, изтриване, модифициране на обекти от страна на клиента

  2. Запазете промените от страна на сървъра с помощта на breeze контролер към SQLServer

Тук проблемът е, че прецизните тестови случаи се провалят, когато тествам в Chutzpah, защото те не получават информация от страна на клиента като (Metadata/ ControllerMethods), която се извиква от браузъра чрез url, дефиниран в Breezeconfig. Въпросът ми е, че как можем да извършим модулен тест на бриз от страната на сървъра, както правят истинските модулни тестове. Предложения за използване на нови плъгини или библиотеки, които всъщност могат да ме накарат да направя модулно тестване на breeze, са добре дошли

Ето фрагмента за моя тестов проект:

 asyncTest("can save nothing", function () {
  expect(1);
  newEm().saveChanges()
      .then(function(saveResult) {
          equal(saveResult.entities.length, 0, 'succeeded in saving nothing');
      })
      .catch(handleFail).finally(start);
});

asyncTest("can save a new Customer entity", function () {
  expect(1);

    // Create and initialize entity to save
    var em = newEm();
    var customer = em.createEntity('Customer', {
        CustomerID: newGuidComb(),
        CompanyName: 'Test1 ' + new Date().toISOString()
    });

    em.saveChanges()
        .then(function (saveResults) {
            ok(!!saveResults.entities[0], ' should have saved new Customer with CustomerID ' +
                customer.getProperty('CustomerID'));
        })
        .catch(handleFail).finally(start);
});

asyncTest("can modify my own Customer entity", function () {
    expect(2);
    var timestamp = new Date().toISOString();
    var em = newEm();

    var customer = em.createEntity('Customer', {
        CustomerID: newGuidComb(),
        CompanyName: "Test2A " + timestamp
    });

    em.saveChanges().then(modifyCustomer).fail(handleSaveFailed).fin(start);

    function modifyCustomer(saveResults) {
        var saved = saveResults.entities[0];
        ok(saved && saved === customer,
            "save of added customer should have succeeded");
        customer.CompanyName("Test2M " + timestamp);
        return em.saveChanges()
        .then(confirmCustomerSaved);
    }

    function confirmCustomerSaved(saveResults) {
        var saved = saveResults.entities[0];
        ok(saved && saved === customer,
            "save of modified customer, '{0}', should have succeeded"
            .format(saved && saved.CompanyName()));
    }

});

person ashishraaj    schedule 29.04.2015    source източник


Отговори (1)


Краткият отговор е да настроите тестовете така, че да не се изисква комуникация със сървъра. Заснемане на метаданните, така че да можете да ги заредите от скрипт, преди да изпълните тестовете си . Създайте фиктивни данни в Breeze, така че заявка от локалния EntityManager вместо от сървъра.

И, разбира се, трябва да отделите бизнес логиката на вашето приложение (вида, който се нуждае от много тестове) от битовете за комуникация на сървъра.

person Steve Schmitt    schedule 29.04.2015
comment
Благодаря, Стив, можем да заредим метаданни и да правим заявки с помощта на локален EntityManager, но какво ще кажете за запазването на данните обратно в базата данни и извличането им, как да го направим?? Ако получа този отговор, значи проблемът ми е най-вече решен. - person ashishraaj; 30.04.2015