首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让Frisby.js测试同步运行

让Frisby.js测试同步运行
EN

Stack Overflow用户
提问于 2016-03-04 18:26:27
回答 4查看 1.9K关注 0票数 2

我的测试中有这些API调用,需要先运行,这样我就可以将响应存储在一个变量中,供以后使用。但是看起来我的测试是异步运行的,所以第二个测试在填充变量之前就完成了。如何使测试同步运行?

我听说过一种方法是使用before并传递done回调。但我不知道如何用jasmine-node实现这一点。

测试示例:

代码语言:javascript
复制
var dataID = '';
frisby.create('Get ID')
  .get(url)
  .expectStatus(200)
  .afterJSON(function(json) {
     dataID = json.id;
  })
.toss();

frisby.create('Get data with ID')
  .get(url, id)
  .expectStatus(200)
  .expectJSON({"id": dataID})
.toss();

编辑:

所以我试着像这样做我的测试,done()回调似乎没有被调用。(测试超时)

代码语言:javascript
复制
describe('API TEST', function() {
  beforeEach(function(done) {
    frisby.create('Get ID')
      .get(url)
      .expectStatus(200)
      .afterJSON(function(json) {
        dataID = json.id;
        done();  //?
      })
      .toss()
  });
  it('should work', function() {
    console.log('TEST');
  }); //"timed out after 5000 msec waiting for spec to complete"
});
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-08 21:24:05

我最后所做的是使用async库并在实际的frisby测试上执行.timeout(60000),如下所示:

代码语言:javascript
复制
async.series([
  function(cb) {
    frisby.create('Get ID')
      .get(url)
      .expectStatus(200)
      .afterJSON(function(json) {
        dataID = json.id;
        cb();
      })
      .toss();
  },
  function() {
     //other tests using id
  }
]);
票数 4
EN

Stack Overflow用户

发布于 2016-03-04 18:41:31

Jasmine通过将一个特殊的done参数作为参数传递给测试函数来处理异步测试--当异步部分完成时,您必须调用done (即done())。

下面是一个使用done的示例测试:

代码语言:javascript
复制
describe('my test', function() {
  it('completes on done', function(done) {
    var a = 10;

    // this would normally be a call to the code under test
    setTimeout(function() {
      a = 20;
    }, 250);

    setTimeout(function() {
      expect(a).toEqual(20);
      done();
    }, 1000);
  });
});

就frisby.js而言,异步测试似乎仍然是一个令人惊讶的问题。见关于github回购的问题:

开放涉及异步的frisby问题

票数 3
EN

Stack Overflow用户

发布于 2016-06-27 23:08:15

现在有点晚了,但万一其他人也有同样的问题。您可以像这样将第二个测试嵌套到第一个测试的afterJson()中,以确保它在完成第一个测试之后运行。

代码语言:javascript
复制
frisby.create('Get ID')
  .get(url)
  .expectStatus(200)
  .afterJSON(function(json) {
     var dataID = json.id;
     frisby.create('Get data with ID')
        .get(url, id)
        .expectStatus(200)
        .expectJSON({"id": dataID})
    .toss()
  })
.toss();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35803415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档