12

Promise を返す非同期関数をテストするために Mocha を使用しています。

プロミスが正しい値に解決されることをテストする最良の方法は何ですか?

4

2 に答える 2

8

バージョン 1.18.0 (2014 年 3 月) の時点で、Mocha には Promise サポートが組み込まれています。テスト ケースから promise を返すことができ、Mocha はそれを待ちます。

it('does something asynchronous', function() { // note: no `done` argument
  return getSomePromise().then(function(value) {
    expect(value).to.equal('foo');
  });
});

return2 行目のキーワードを忘れないでください。誤って省略した場合、Mocha はテストが同期的であると想定し、.then関数を待機しないため、アサーションが失敗した場合でもテストは常にパスします。


これがあまりにも繰り返される場合は、より簡単に promise をテストするためのプロパティを提供するchai-as-promisedライブラリを使用することをお勧めします。eventually

it('does something asynchronous', function() {
  return expect(getSomePromise()).to.eventually.equal('foo');
});

it('fails asynchronously', function() {
  return expect(getAnotherPromise()).to.be.rejectedWith(Error, /some message/);
});

return繰り返しますが、キーワードを忘れないでください。

于 2015-12-06T14:50:48.830 に答える
4

次に、エラーを処理するために使用できる promise を「返します」。ほとんどのライブラリはdone、未処理のエラーが確実にスローされるようにするメソッドをサポートしています。

it('does something asynchronous', function (done) {
  getSomePromise()
    .then(function (value) {
      value.should.equal('foo')
    })
    .done(() => done(), done);
});

mocha-as-promisedなどを使用することもできます(他のテスト フレームワークにも同様のライブラリがあります)。サーバー側を実行している場合:

npm install mocha-as-promised

次に、スクリプトの開始時に:

require("mocha-as-promised")();

クライアント側を実行している場合:

<script src="mocha-as-promised.js"></script>

次に、テスト内で promise を返すことができます。

it('does something asynchronous', function () {
  return getSomePromise()
    .then(function (value) {
      value.should.equal('foo')
    });
});

またはコーヒースクリプトで(元の例に従って)

it 'does something asynchronous', () ->
  getSomePromise().then (value) =>
    value.should.equal 'foo'
于 2013-02-25T13:22:17.573 に答える