Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 控制质量测试命令_Jquery_Ajax_Unit Testing_Qunit - Fatal编程技术网

Jquery 控制质量测试命令

Jquery 控制质量测试命令,jquery,ajax,unit-testing,qunit,Jquery,Ajax,Unit Testing,Qunit,我已经用jQuery和大量ajax请求(json格式)构建了一个网站。 我想做一些单元测试来验证服务器端的请求。 当我使用jQuery时,我使用qUnit,但我有一个测试顺序的问题 例如,我想测试一下: -创建一个用户=>是可能的 -使用有效名称重命名用户=>是可能的 -无法使用旧名称重命名用户=>无法 -删除用户=>是可能的 我的代码: $("button#test").button().click(function() { module("Module Users");

我已经用jQuery和大量ajax请求(json格式)构建了一个网站。
我想做一些单元测试来验证服务器端的请求。
当我使用jQuery时,我使用qUnit,但我有一个测试顺序的问题

例如,我想测试一下: -创建一个用户=>是可能的
-使用有效名称重命名用户=>是可能的
-无法使用旧名称重命名用户=>无法
-删除用户=>是可能的

我的代码:

  $("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。。。 (那么,我认为问题在于我的测试不是独立的)

如何解决这个问题?
我可以在1中级联所有4个测试,但我认为它的可读性会降低


您认为如何?

您的示例中的主要问题是测试在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();
  });
});

正如kelloti所说,qUnit是用于单元测试的,并且“单元测试应该是相互独立和隔离的”。。。
然后,我必须在测试删除之前添加一个元素。

有时候,您只是想完成这项工作 如果需要,试试看


QUnit.config.reorder=false

单元测试应该是相互独立的。单元测试框架通常以任意顺序执行测试。原因是独立测试更具可读性,更易于维护,测试效果更好。有用于场景测试的jQuery框架吗?不,问题在于qUnit用于单元测试,单元测试应该是独立的……如果其他人的答案是答案,你应该把它标记为答案。凯洛蒂没有回答这个问题,只是评论一下这个问题!我对它的评论投了赞成票,乔恩的回答不好-1集成测试也有价值,通常需要按特定顺序运行。如果你说QUnit是集成测试的错误工具,或者他的基本集成方法有缺陷,那么提供一个可行的替代方案。谢谢。虽然对于大多数测试,您确实希望保持它们的独立性,但如果您希望使用此简单设置创建、修改、删除集成测试,这将是非常棒的!)