1

最初に実行する必要があるこれらの API 呼び出しがテストに含まれているため、後で使用するために応答を変数に保存できます。しかし、テストが非同期で実行されているように見えるため、変数が設定される前に 2 番目のテストが終了します。テストを同期的に実行するにはどうすればよいですか?

before1 つの方法は、コールバックを使用して渡すことだと聞きましたdone。しかし、私はそれを行う方法がわかりませんjasmine-node

テストの例:

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()コールバックが呼び出されないようです。(テストタイムアウト)

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"
});
4

4 に答える 4

2

Jasmine は、特別なパラメーターを引数としてテスト関数に渡すことによって非同期テストを処理します。非同期部分が終了doneしたら、完了 (つまり) を呼び出す必要があります。done()

done を使用したテストの例を次に示します。

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 リポジトリの問題を参照してください。

非同期を含むフリスビーの問題を開く

于 2016-03-04T18:41:31.643 に答える