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