如何使用 jasmine 测试需要很长时间响应的异步函数?

2024-01-06

我正在使用一个函数从 Web api 获取数据。基本上使用$.ajax.

我现在正在测试它waits()像这样:

describe('xxxxxxxxxxxxxxxxxxxxx', function () {
  var r;
  it('fetchFilter', function () {
    runs(function () {
      model.fetch(opts)
      .done(function(data) {
        r = data;
      });
    });

    waits(2000);

    runs(function () {
      expect(r[0].gender).toBeDefined();
    });
  });
});

问题是:

  1. 不能保证waits(2000)会做好这项工作。由于各种原因(网络连接、api本身的算法效率等),我可能不得不waits(5000)或更多,或对于某些型号waits(500)足够。而最让人恼火的是,一切都失去了控制。
  2. 很多waits()使得测试规范运行浪费大量时间等待。运行整个套件的时间太长,无法接受。

有没有一些best practice做那些事情?

PS:我知道单元测试不应该应用于某些依赖于webapi或数据库的功能。但我正在使用 single-page-js-heavy-webapp。数据获取过程与我如何通过 js 模型使用它们一样重要。


waitsFor()将等待指定的闩锁回调返回true(每隔几毫秒就会尝试多次)。如果超过指定的超时(本例中为 5000 毫秒),它也会引发异常。

describe('xxxxxxxxxxxxxxxxxxxxx', function () {
  var r, fetchDone;

  it('fetchFilter', function () {

    runs(function () {
      model.fetch(opts).done(function(data) {
        r = data;
        fetchDone = true;
      });
    });

    waitsFor(function() { 
      return fetchDone; 
    }, 5000); 

    runs(function () {
      expect(r[0].gender).toBeDefined();
    });

  });
});

检查茉莉花文档 http://pivotal.github.com/jasmine/了解更多信息waitsFor() and runs()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 jasmine 测试需要很长时间响应的异步函数? 的相关文章

随机推荐