Контрольный тестовый заказ QUnit - PullRequest
3 голосов
/ 07 февраля 2011

У меня есть сайт с jQuery и большим количеством запросов ajax (формат json).
Я хотел бы провести некоторый модульный тест для проверки запроса на стороне сервера.
Поскольку я использовал jQuery, я использую qUnit, но у меня есть проблема порядка теста ...

Например, я хотел проверить это: - создать пользователя => возможно
- переименовать пользователя с правильным именем => возможно
- переименовать пользователя с использованным именем => невозможно> 1007 * - удалить пользователя => возможно

Мой код:

  $("button#test").button().click(function() {
    module("Module Users");
    newName = 'newUserName';
    userId = 0;

    test("1 Add a user", function() {
      stop();
      $.getJSON(Request,{'action':'add','table':'users'}
        ,function(data) {
          equal( data.status,"OK", "Answer is OK" );
          notEqual( data.item,null, "item is return" );
          userId = data.item.id;
          start();
      });
    });

    test("2 Rename user", function() {
      stop();
      $.getJSON(Request,{'action':'modify','table':'users','id':userId,'field':'name','value':newName}
        ,function(data) {
          equal( data.status,"OK", "Answer is OK" );
          equal( data.value,newName, "Return value is OK" );
          start();
      });
    });

    test("3 Rename user with use name", function() {
      stop();
      badName = 'usedName'; // assert that a user with this name exists
      $.getJSON(Request,{'action':'modify','table':'users','id':userId,'field':'name','value':badName}
        ,function(data) {
          equal( data.status,"Fail", "Answer is Fail" );
          equal( data.value,newName, "Return value is previous name" );
          start();
      });
    });

    test("4 Remove the user", function() {
      stop();
      $.getJSON(Request,{'action':'remove','table':'users','id':userId}
        ,function(data) {
          equal( data.status,"OK", "Answer is OK" );
          start();
      });
    });

Но проблема в том, что 1 тест выполняется, затем 4, 2 и 3 ... (Тогда, я думаю, проблема в том, что мои тесты не являются независимыми)

Как можно это решить?
Я могу каскадировать все 4 теста в 1, но думаю, что это будет менее читабельным ...

Что вы думаете?

Ответы [ 3 ]

8 голосов
/ 14 августа 2012

Иногда хочется просто выполнить работу Если нужно, попробуйте.

QUnit.config.reorder = false;

1 голос
/ 26 февраля 2011

Основная проблема в вашем примере заключается в том, что тесты выполняются в обработчике события click.Вам необходимо провести рефакторинг и выполнить вызовы test () на верхнем уровне (независимо от какого-либо события щелчка).Так как ваши тесты сами тестируют только функциональность ajaxy, вам не нужно использовать кнопку вообще.Вот как то так:

test("1 Add a user", function() {
  stop();
  $.getJSON(Request,{'action':'add','table':'users'}
    ,function(data) {
      equal( data.status,"OK", "Answer is OK" );
      notEqual( data.item,null, "item is return" );
      userId = data.item.id;
      start();
  });
});

test("2 Rename user", function() {
  stop();
  $.getJSON(Request,{'action':'modify','table':'users','id':userId,'field':'name','value':newName}
    ,function(data) {
      equal( data.status,"OK", "Answer is OK" );
      equal( data.value,newName, "Return value is OK" );
      start();
  });
});

test("3 Rename user with use name", function() {
  stop();
  badName = 'usedName'; // assert that a user with this name exists
  $.getJSON(Request,{'action':'modify','table':'users','id':userId,'field':'name','value':badName}
    ,function(data) {
      equal( data.status,"Fail", "Answer is Fail" );
      equal( data.value,newName, "Return value is previous name" );
      start();
  });
});

test("4 Remove the user", function() {
  stop();
  $.getJSON(Request,{'action':'remove','table':'users','id':userId}
    ,function(data) {
      equal( data.status,"OK", "Answer is OK" );
      start();
  });
});
0 голосов
/ 04 марта 2011

Как говорит Келлоти, qUnit предназначен для модульного тестирования, а «модульные тесты должны быть независимыми и изолированными друг от друга» ... Затем я должен добавить элемент перед тестированием удаления.

...