如何确保在QUnit

时间:2017-03-20 20:39:40

标签: jquery database unit-testing qunit

我正在尝试使用QUnit在我的Web应用程序上运行单元测试,我需要一种方法来在运行单元测试之前设置数据库测试数据。每次测试手动输入和擦除数据库中的测试数据都非常缓慢且重复。

我在服务器端编写了一些临时请求处理程序,它们处理下面代码中显示的“BEFORE”请求。

问题是修改数据库需要很长时间,因此QUnit测试在数据库测试数据有机会更新之前就开始运行。

我能找到的最佳参考是https://api.qunitjs.com/QUnit.module/(位于页面底部)。它表明可以使用promises在'before'和'after'函数中打开和关闭数据库连接。但是,这个例子太简短了,并没有提供足够的信息来做我想做的事情。

我想过嵌套我的JQuery请求,以便测试代码只在收到服务器响应后(在更新数据库之后)执行。但是,这使得测试代码难以阅读,重复,并且忽略了QUnit提供的“之前”和“之后”钩子的使用。

有什么建议吗?

以下是我目前用于为单元测试设置数据库的测试代码。

QUnit.module("EMD_4: updateItemQtyRequest",{

before: function(){

    // Rule 2 setup
    $.get( "http://localhost:8080/foodmap/EMD_4_BEFORE.do",
            {cmd:"insert into wants (email,id,qty) values ('only_wants',220,1)"}
          ); 

    // Rule 3 setup
    $.get( "http://localhost:8080/foodmap/EMD_4_BEFORE.do",
            {cmd:"insert into wants (email,id,qty) values ('wants_and_hasWanted',219,1)"}
          );
    $.get( "http://localhost:8080/foodmap/EMD_4_BEFORE.do",
            {cmd:"insert into has_wanted (email,id) values ('wants_and_hasWanted',220)"}
          );  
},
after: function(){
   // cleanup database
}
...Unit Tests ..

1 个答案:

答案 0 :(得分:0)

the modulebefore函数接受assert object,它允许您指定该段代码是异步的。因此,我认为您可以执行以下代码。也就是说,请注意我将所有$.get()个调用嵌套在一起,以便我们知道它们何时完成并且可以告诉QUnit继续前进。

QUnit.module("EMD_4: updateItemQtyRequest",{

  before: function(assert){
    var allDone = assert.async();

    // Rule 2 setup
    $.get( "http://localhost:8080/foodmap/EMD_4_BEFORE.do",
            {cmd:"insert into wants (email,id,qty) values ('only_wants',220,1)"}
    )
    .done(function() {
      // Rule 3 setup
      $.get( "http://localhost:8080/foodmap/EMD_4_BEFORE.do",
              {cmd:"insert into wants (email,id,qty) values ('wants_and_hasWanted',219,1)"}
      )
      .done(function() {
        $.get( "http://localhost:8080/foodmap/EMD_4_BEFORE.do",
                {cmd:"insert into has_wanted (email,id) values ('wants_and_hasWanted',220)"}
        )
        .done(function() {
          // NOW TELL QUNIT WE'RE DONE
          allDone();
        });
      });
    });

  },
  after: function(){
    // cleanup database
  }
});

// ...Unit Tests ...