ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptユニットテストでの約束:決定的なガイド
JavaScriptは非同期コーディングを簡素化することを約束しますが、それらをテストするのは難しい場合があります。 このガイドは、単体テスト内で約束を効果的に処理する方法を明確にし、一般的な落とし穴を避け、コードの読みやすさを改善します。 これらの手法を示すサンプルプロジェクトは、著者のWebサイト(元のテキストで提供されていないリンク)で入手できます。
キーテイクアウト:
chai-as-promised
モカとチャイをインストール:
約束をテストするための素朴なアプローチは、しばしば冗長で読みやすいテストをもたらします:
<code class="language-bash">npm install mocha chai</code>
コールバックとエラー処理は、不必要な複雑さを追加します。 適切なエラー処理がなければ、拒否された約束は誤検知につながる可能性があります。
<code class="language-javascript">var expect = require('chai').expect; it('should do something with promises', function(done) { var blah = 'foo'; var result = systemUnderTest(); result.then(function(data) { expect(data).to.equal(blah); done(); }, function(error) { assert.fail(error); done(); }); });</code>Mocha and Promises:
done()
拒否された約束は、自動的にテストに失敗します。 最初の例を改善できます:
約束を返すことで、
<code class="language-javascript">it('should fail the test', function() { return Promise.reject('this promise will always be rejected'); });</code>と明示的なエラー処理の必要性がなくなります。
<code class="language-javascript">var expect = require('chai').expect; it('should do something with promises', function() { var blah = 'foo'; var result = systemUnderTest(); return result.then(function(data) { expect(data).to.equal(blah); }); });</code>:
done()
でのテストの改善
:
chai-as-promised
このライブラリでは、より簡潔なアサーションが可能になります:
chai-as-promised
<code class="language-bash">npm install chai-as-promised</code>。
で動作します
<code class="language-javascript">var chai = require('chai'); var expect = chai.expect; var chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); it('should do something with promises', function() { var blah = 'foo'; var result = systemUnderTest(); return expect(result).to.eventually.equal(blah); });</code>有用なパターン:
eventually
eventually.deep.equal
を使用してください。eventually.become
Promise.all
複数の約束を比較する:Promise.all
およびto.be.rejected
は、モカのto.be.rejectedWith
、before
after
beforeEach
約束とock/スタブ(sinon.jsを使用):afterEach
を使用して、約束を返すスタブを作成します。 単純化された約束のスタブについては、
を検討してください
<code class="language-bash">npm install mocha chai</code>結論:
sinon.stub().returns(Promise.resolve/reject(...))
sinon-as-promised
Mocha、Chai、および
よくある質問(FAQ):(元のFAQは長さと冗長性のために省略されています。それらは、記事に既に存在する情報を主にカバーしています。
以上がJavaScriptユニットテストでの約束:決定的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。