Hsu*_*Jen 3 error-handling generator saga jestjs redux-saga
大家。我用玩笑框架测试传奇。我可以在正常情况下测试我的传奇。但是我想测试catch()中的代码,因此我必须模拟一个错误以触发catch。我在redux-saga官方文档和其他stackoverflow答案中找到了一些解决方案。但是我仍然有问题。
当我像下面的示例一样在saga.test.js中使用throw()时,它将显示“ Error [object Object] throwed”。因此它不能真正通过此测试。我没看到有人问同样的问题。有人可以帮我吗?非常感谢。
错误结果屏幕:
api.js
const api = {
fetchProductAPI() {
return 'iphone';
},
};
export default api;
Run Code Online (Sandbox Code Playgroud)
saga.js
import { call, put } from 'redux-saga/effects';
import api from './api';
export default function* fetchProduct() {
try {
yield call(api.fetchProductAPI);
yield put({ type: 'PRODUCTS_RECEIVED', product: 'iphone' });
} catch (error) {
yield put({ type: 'PRODUCTS_REQUEST_FAILED', error });
}
}
Run Code Online (Sandbox Code Playgroud)
saga.test.js
import { put, call } from 'redux-saga/effects';
import fetchProduct from './saga';
import api from './api';
describe('fetchProduct()', () => {
it('try', () => {
const gen = fetchProduct();
expect(gen.next().value).toEqual(call(api.fetchProductAPI));
expect(gen.next().value).toEqual(put({ type: 'PRODUCTS_RECEIVED', product: 'iphone' }));
});
it('catch', () => {
const error = 'product not found';
const gen = fetchProduct();
expect(
gen.throw({
error: 'product not found',
}).value
).toEqual(put({ type: 'PRODUCTS_REQUEST_FAILED', error }));
});
});
Run Code Online (Sandbox Code Playgroud)
我在下面找到了相关的解决方案答案:
我的朋友帮我解决了这个问题。所以我一个人回答我的问题...
我需要gen.next()在投掷之前添加。这是下面的解决方案代码。
it('catch', () => {
const error = 'product not found';
const gen = fetchProduct();
gen.next(); //add gen.next() before throw
expect(
gen.throw('product not found').value).
toEqual(put({ type: 'PRODUCTS_REQUEST_FAILED', error }));
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |