【问题标题】:Consecutive asynchronous test steps in avaava中的连续异步测试步骤
【发布时间】:2017-06-06 19:19:37
【问题描述】:

问题

流行的ava 包具有简单而强大的javascript测试框架:

import test from 'ava';

test('single step', t => {
    t.is('bar', 'bar');
    t.end();
});

同步代码的测试非常简单。但是,我不确定如何编写具有多个连续、依赖步骤的测试。

例如,我想测试一个 REST API。我想使用POST 创建一个资源,使用GET 调用确保它存在,并使用DELETE 删除它。

不用说,顺序很重要:POST 调用必须在GET 调用开始之前完成,有时我们甚至希望在步骤之间有一个睡眠时间。

我尝试了什么

  • 尝试了一系列setTimeouts,其中每个调用的回调是下一个测试步骤。它相当难以阅读。

我的问题

使用ava 编写包含多个连续步骤的测试的正确方法是什么?

这些步骤是异步且连续的

【问题讨论】:

    标签: javascript testing fixtures ava


    【解决方案1】:

    如果您希望在一个测试中包含所有这些步骤,请确保您可以从请求库中获得承诺。然后使用async/await

    【讨论】:

      【解决方案2】:

      如果您通过顺序执行器nsynjs 运行代码,您可以将慢速函数和逻辑混合到复杂场景中。你只需要编写你的代码,就好像它是同步的一样,并将其放入函数中:

      function process() {
          var data = jQueryGetJSON(nsynjsCtx, "data/index.json").data; // ajax call to get some data
          for(var i in data) { // data is ready at this point
              var resp = jQueryGetJSON(nsynjsCtx, "data/"+data[i]).data;  // another ajax call
              // ... resp is ready here, do processing of resp...
              nsynWait(nsynjsCtx,100); // wait 100ms
          }
          return someResult;
      }
      

      然后你通过 nsynjs 运行那个函数:

      nsynjs.run(process,this,function (someResult) {
          console.log('done');
          // put t.end() inside this callback
      });
      

      在此处查看更多示例:https://github.com/amaksr/nsynjs/tree/master/examples

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-12
        • 2016-10-20
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 2018-09-02
        相关资源
        最近更新 更多