鑰匙要點:
>保證在單位測試中處理可能很複雜,如果不仔細管理,則會導致誤報。
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()
> install
chai-as-promised
這個庫允許更多簡潔的斷言:
chai-as-promised
關鍵字可以處理承諾的異步性質。 請記住總是回報諾言。 各種Chai主張與
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.deep.equal
或eventually.become
進行深度對像比較。 Promise.all
Promise.all
斷言失敗:to.be.rejected
to.be.rejectedWith
測試掛鉤:before
> hooks中無縫工作。
after
beforeEach
afterEach
>承諾和模擬/存根(帶有sinon.js):>使用
來創建存根返回承諾。 考慮以簡化承諾固執。
npm install mocha chai
>結論:sinon.stub().returns(Promise.resolve/reject(...))
sinon-as-promised
>,測試承諾變得更加干淨,更可讀。 始終從測試功能中返回承諾。 提供的示例項目(鏈接不可用)提供了實踐示例。 >常見問題(常見問題解答):
(由於長度和冗餘而省略了原始常見問題解答。它們在很大程度上涵蓋了本文中已經存在的信息。)以上是JavaScript單位測試中的承諾:確定指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!