差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
web:reactjs:test:teststaticmethod [2019/03/10 17:15]
tony
web:reactjs:test:teststaticmethod [2023/06/25 09:48] (目前版本)
行 58: 行 58:
 Auth.signOut = auth_do_nothing.bind(Auth);​ Auth.signOut = auth_do_nothing.bind(Auth);​
 </​code>​ </​code>​
-但這寫法存在restore的問題,會將狀態延續至下一個testcase中;因此本篇文章將分享透過[[https://​sinonjs.org/​releases/​latest/​|Sinon]]去mock static method並且清除mock狀態的做法。+但這寫法存在會將狀態延續至下一個testcase中(testsuite似乎沒影響);因此本篇文章將分享透過[[https://​sinonjs.org/​releases/​latest/​|Sinon]]去mock static method並且清除mock狀態的做法。
 ===== How to? ===== ===== How to? =====
-Problem中的Logout為例,我想要模擬使用者點擊Logout並透過Auth.signOut執行登出動作,完整的測試程式碼如下:​+以Logout為例,我想要模擬使用者點擊Logout並透過Auth.signOut執行登出動作,完整的測試程式碼如下:​
 <code javascript>​ <code javascript>​
 import Logout from '​../​Logout'​ import Logout from '​../​Logout'​
行 102: 行 102:
 }); });
 </​code>​ </​code>​
-在test beforeEach中,我透過sinon.stub去模擬Auth.signOut doNothing的動作,即不給予任何的動作;而在afterEach中,我可以透過stub產生的instance去做restore的動作,讓原本Auth.signOut回復到模擬之前:​+在test beforeEach中,我透過sinon.stub去模擬Auth.signOut doNothing的動作,即不給予任何的動作;而在afterEach中,我可以透過stub產生的instance去做restore的動作,讓Auth.signOut回復到模擬之前:​
 <code javascript>​ <code javascript>​
   let stubSignOut;​   let stubSignOut;​
行 117: 行 117:
 expect(stubSignOut.called).toBe(true);​ expect(stubSignOut.called).toBe(true);​
 </​code>​ </​code>​
-假如我是在Login form中想要模擬登入失敗的情形呢? ​假如我一樣用signOut當範例,我可以在stubSignOut instance上指定要拋出怎樣的例外:​+假如我是在Login form中想要模擬登入失敗的情形呢? ​這裡我一樣用signOut當範例,我可以在stubSignOut instance上指定要拋出怎樣的例外:​
 <code javascript>​ <code javascript>​
   it('​Test stub with throw',​ ()=> {   it('​Test stub with throw',​ ()=> {
行 131: 行 131:
   });   });
 </​code>​ </​code>​
-我要模擬的是回傳值,可以透過以下方式:​+要用回傳值的方式可以透過以下方式:​
 <code javascript>​ <code javascript>​
   it('​Test stub with return value',​ ()=> {   it('​Test stub with return value',​ ()=> {
行 139: 行 139:
   });    }); 
 </​code>​ </​code>​
-假如我要模擬有帶參數的情況呢?​ 以login失敗為例,可以使用withArgs來達到這個需求:​+假如我要模擬像signIn有帶參數的情況呢?​ 以login失敗為例,可以使用withArgs來達到這個需求:​
 <code javascript>​ <code javascript>​
   it('​Test stub with arguments',​ ()=> {   it('​Test stub with arguments',​ ()=> {