Promise を返す非同期関数をテストするために Mocha を使用しています。
プロミスが正しい値に解決されることをテストする最良の方法は何ですか?
Promise を返す非同期関数をテストするために Mocha を使用しています。
プロミスが正しい値に解決されることをテストする最良の方法は何ですか?
バージョン 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');
});
});
return
2 行目のキーワードを忘れないでください。誤って省略した場合、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
繰り返しますが、キーワードを忘れないでください。
次に、エラーを処理するために使用できる 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'