【问题标题】:Run frisby test when promise is satisfied满足承诺时运行 frisby 测试
【发布时间】:2014-08-21 02:25:11
【问题描述】:

假设您有一个包含用户和类别的 API。每个用户必须有一个类别和一个 状态。

目前,你必须有类似的东西

frisby.create("Get categories")
      .get("http://api/category")
      .expectStatus(200)
      .expectJSON("*",{...})
      .afterJSON(function(categories)
      {   
          frisby.create("Get status list")
                .get("http://api/status")
                .expectStatus(200)
                .expectJSON("*",{...})
                .afterJSON(function(statusList){
                     var luckyCategory = chooseLuckyCategory(categories);
                     frisby.create("Create new user")
                           .post(
                               "http://api/user", 
                               { 
                                 name : "John", 
                                 category : luckyCategory 
                               })
                           .expectStatus(202)
                           .toss();
                 })
                 .toss();

      })
     .toss();

这太可怕了。如果我需要一个需要检索我的类别的新测试,我必须 重复上面几乎所有的代码或在其中链接新测试。它不会 很简单,否则我需要重复一遍。

这样会好很多:

var categoriesP = q.defer();
var statusListP = q.defer();
var categories, statusList;

frisby.create("Get categories")
      .get("http://api/category")
      .expectStatus(200)
      .expectJSON("*",{...})
      .afterJSON(function(result)
      {   
          categories = result;
          categoriesP.resolve(result);
      })
     .toss();


frisby.create("Get status list")
    .get("http://api/status")
    .expectStatus(200)
    .expectJSON("*",{...})
    .afterJSON(function(result){
         statusList = result;
         statusListP.resolve(result);
     })
    .toss();

q.all([categoriesP.promise, statusListP.promise])
 .then(function()
  {
     var luckyCategory = chooseLuckyCategory(categories);
     var happyStatus = chooseHappyStatus(status);
     frisby.create("Create new user")
           .post(
               "http://api/user", 
               { 
                 name : "John", 
                 category : luckyCategory 
               })
           .expectStatus(202)
           .toss();
  });

代码不那么复杂,而且我承诺可以重复使用。我什至可以创建一个 nodejs 模块来保存诸如 category 和 稍后将需要的状态。主要问题是茉莉花杀死了所有 一旦所有抛出的测试都得到满足或拒绝,就立即处理。但这并没有为兑现承诺提供足够的时间。

【问题讨论】:

    标签: javascript node.js rest jasmine automated-tests


    【解决方案1】:

    除非你真的需要用 javascript 测试,你可以尝试使用Airborne.rb。它类似于 Frisby,只是没有异步问题。

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2022-11-24
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多