[JS]幫自己寫的Promise跑個測試

張庭瑋
4 min readJul 10, 2020

--

繼上一篇

今天想來幫手寫的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了。

希望這種打錯變數的事不會再發生了……

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response