0

私は Chai と Sinon で promies をテストすることで立ち往生しています。通常、私は xhr リクエストのラッパーでサービスを受け、約束を返します。私はそれを次のようにテストしようとしました:

beforeEach(function() {
    server = sinon.fakeServer.create();
});

afterEach(function() {
    server.restore();
});

describe('task name', function() {
    it('should respond with promise error callback', function(done) {

        var spy1 = sinon.spy();
        var spy2 = sinon.spy();

        service.get('/someBadUrl').then(spy1, spy2);

        server.respond();
        done();

        expect(spy2.calledOnce).to.be.true;
        expect(sp2.args[0][1].response.to.equal({status: 404, text: 'Not Found'});
    });
});

これに関する私のメモ:

// spy2 は、expect finish アサーションの後に呼び出されます //
試してみましたが、結果はありませんでしたvar timer = sinon.useFakeTimers()// chai-as-promised で試しました - 使い方がわかりません :-( //私の環境で利用可能な選択された npm モジュールだけ をインストールすることはできませんtimer.tick(510);

sinon-as-promised

このコードを修正する/このサービスモジュールをテストする方法はありますか?

4

1 に答える 1

1

ここにはさまざまな課題があります。

  • が非同期の場合service.get()、アサーションをチェックする前にその完了を待つ必要があります。
  • (提案された) ソリューションは promise ハンドラーでアサーションをチェックするため、例外に注意する必要があります。を使用する代わりに、done()Mocha の (使用していると思われる) 組み込みの promise サポートを使用することを選択します。

これを試して:

it('should respond with promise error callback', function() {
  var spy1 = sinon.spy();
  var spy2 = sinon.spy();

  // Insert the spies as resolve/reject handlers for the `.get()` call,
  // and add another .then() to wait for full completion.
  var result = service.get('/someBadUrl').then(spy1, spy2).then(function() {
    expect(spy2.calledOnce).to.be.true;
    expect(spy2.args[0][1].response.to.equal({status: 404, text: 'Not Found'}));
  });

  // Make the server respond.
  server.respond();

  // Return the result promise.
  return result;
});
于 2016-01-23T14:58:46.950 に答える