繼上一篇
今天想來幫手寫的Promise跑個測試,使用的是這款
Promises-aplus-tests
首先先在terminal開啟專案資料夾,安裝promises-aplus-tests
yarn init...yarn add promises-aplus-tests
並在package.json內新增script(我使用start)
"scripts": { "start": "promises-aplus-tests index.js"}
還要在原來的index.js作出以下處理
myPromise.deferred = function () { let defer = {}; defer.promise = new myPromise((resolve, reject) => { defer.resolve = resolve; defer.reject = reject; }); return defer;};module.exports = myPromise;
一切都準備就緒了,就開始來測試吧

2.2.1.1測試不通過…可是在then的一開始有針對這個規範處理

所以想必問題不是出在這裡,這時候可以來觀察一下,對於onFulfilled及onRejected的處理幾乎是對等的,這裡卻只有onFulfilled不為function時的2.2.1.1規範報錯,所以可以懷疑是與之對應的Promise的reject函式出問題了

此時要來看一下一開始定義的status物件

到此…問題很明顯了
vm.status = status.reject;
應該改成
vm.status = status.rejected;
因為在status並沒有reject這個屬性,導致myPromise的status直接變成undefined,因為status並非處於表訂的三種狀態之一,導致then只return一個什麼事都沒幹的新Promise,當然也就無法通過測試了

到此,手寫一個基本的Promise也算告一個段落了,這次的錯誤屬於相當初期的錯誤,卻在一開始時沒發現也是我的問題…多半是因為只專在在resolve的結果上,忘了去注意reject了。
希望這種打錯變數的事不會再發生了……