我有一個簡單的功能如下
function foo({ platform }) {
if (platform === 'all') {
throw new Error('Platform value can only be android or ios');
}
return `${platform}`;
}
然后我寫了單元測驗如下
it('should return correct result with platform', () => {
expect(foo({ platform: 'ios' })).toBe('ios');
expect(foo({ platform: 'android' })).toBe('android');
expect(foo({platform: 'all'})).toThrow(new Error('Platform value can only be android or ios'));
});
由于最后一個測驗用例沒有任何有用資訊,測驗實際上失敗了
FAIL src/utils/__test__/foo.test.ts
● foo() ? should return correct result with platform
Platform value can only be android or ios
16 | }) {
17 | if (platform === 'all') {
> 18 | throw new Error('Platform value can only be android or ios');
| ^
19 | }
20 |
21 | return `${platform}`;
at xx (src/utils/foo.ts:18:11)
我也嘗試expect用 try catch 塊包裹整個,但測驗也沒有通過
uj5u.com熱心網友回復:
toThrow僅在expect傳遞可以呼叫以導致例外的無引數函式時才有效。
/* this is the only test that needs this */
expect(() => foo({platform: 'all'})).toThrow();
這是因為 JavaScript 不支持自動延遲函式引數,因此無法expect“暫停”對其引數的評估。因此,API 必須是“給我(Jest)一個要呼叫的函式,當我準備好處理該函式可能執行的操作時,我會呼叫它”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420321.html
標籤:
上一篇:組件在狀態更改未發生時重新渲染
