unit-testing - Saga 单元测试 deepEqual 仍然返回 false
问题描述
我对 Redux-saga 和进行单元测试非常陌生。API 调用函数单元测试代码即使看起来相同也会返回 false。我错过了什么?
[行动]
export const actions = {
readUsers: {
read: (data) => util.createAction('READ_USER', data),
request: () => util.createAction('READ_REQUEST'),
success: (data: any) => util.createAction('READ_SUCCESS', data),
failure: (error: any) => util.createAction('READ_FAILURE', error)
}
};
[发电机功能]
export function* fetchUsers(action) {
yield put(actions.readUsers.request());
try {
let data = {id: action.payload.id, option: action.payload.option};
let response = yield call(API().getUsers, data);
if (response) {
yield put(actions.readUsers.success(response.users));
} else {
yield put(actions.readUsers.failure(response.error));
}
} catch (error) {
yield put(actions.readUsers.failure(error));
}
};
[单元测试]
const id = 'user-id';
const option = {};
const result = {users: []};
const action = {payload : {id, option}};
describe('user-saga', () => {
describe('fetchUsers', () => {
const generator = fetchUsers(action);
it('should return actions.readUsers.request()', () => {
assert.deepEqual(generator.next().value, put(actions.readUsers.request()));
}); // PASS
it('should return the Api.getUsers call', () => {
assert.equal(generator.next(result).value, call(Api().getUsers, action.payload));
}); // FAIL
it('should return actions.readUsers.success()', () => {
assert.deepEqual(generator.next(result).value, put(actions.readUsers.success(result)));
}); // FAIL
it('should be finished', () => {
assert.deepEqual(generator.next().done, true);
}); // PASS
})
});
[测试输出]
第一次测试通过。
第二次测试失败,出现此错误消息
AssertionError: { '@@redux-saga/IO': true,
CALL: { context: null, fn: [Function: getUsers], args: [ [Object] ] } } deepEqual { '@@redux-saga/IO': true,
CALL: { context: null, fn: [Function: getUsers], args: [ [Object] ] } }
第三次测试失败,出现此错误消息
AssertionError: undefined deepEqual { '@@redux-saga/IO': true,
PUT: { channel: null,
action: { type: 'READ_SUCCESS', users: undefined } } }
解决方案
推荐阅读
- javascript - 如何在 RxJS 中使用 concat 运算符,但忽略第一个 observable 的所有排放
- image-processing - 如何将多个图像作为输入提供给卷积神经网络
- java - 在运行时检查异常是否为已检查异常
- firebase - SwiftUI macos 应用程序中的 Firebase 问题。[在模拟器上运行 InstanceID 没有 APNS。默认使用 prod 配置文件。]
- node.js - 从连接到 Google Functions 的端点调用时,Firebase ID 令牌的“aud”(受众)声明不正确
- reactjs - react-router 链接更改 url 但路由组件不呈现
- c# - 从同一个项目问题访问多个数据库
- r - 使用 R 在两个圆的交点处创建一个点
- laravel - 将数组传递到 Laravel 中的单列
- android - Android:触摸外部时如何关闭 DatePicker DialogFragment?