Tôi đang cố gắng kiểm tra mọi tình huống mà câu chuyện của tôi có thể theo dõi, nhưng tôi không thể thực hiện các hành vi tôi muốn. Điều này khá đơn giản, tôi có một yêu cầu HTTP (đăng nhập), và tôi muốn kiểm tra sự thành công và các trường hợp thất bại bằng cách chế nhạo phương thức API của tôi. Tuy nhiên, có vẻ như call effect
không kích hoạt chức năng api của tôi, tôi vẫn chưa thực sự hiểu nó hoạt động như thế nào, nhưng tôi đoán rằng phần mềm trung gian chịu trách nhiệm gọi hàm, và vì tôi không mặc dù các cửa hàng trên thử nghiệm của tôi, tôi không thể có được kết quả.Làm cách nào để kiểm tra lỗi yêu cầu API với Redux Saga?
Vì vậy, câu hỏi của tôi là, làm thế nào bạn có thể kiểm tra saga của bạn khi bạn cần phải gửi các hành động khác nhau (thường thành công hay thất bại) bên cạnh cuộc gọi không đồng bộ của bạn?
Tôi nhìn cho một ví dụ, tôi thấy saga với thành công và thất bại nhưng trường hợp thất bại không bao giờ được thử nghiệm, ví dụ như trong ví dụ giỏ hàng here
SAGA.JS
export function* login(action) {
try {
const user = yield call(api.login, action);
return yield put(actions.loginSuccess(user));
} catch(e) {
yield put(actions.loginFail(e));
}
}
export default function* rootAuthenticationSagas() {
yield* takeLatest(LOGIN, login);
}
test.js
describe('login',() => {
context('When it fails',() => {
before('Stub the api',() => {
sinon.stub(api, 'login',() => {
// IT NEVER COMES HERE !
return Promise.reject({ error: 'user not found' });
});
});
it('should return a LOGIN_FAIL action',() => {
const action = {
payload: {
name: 'toto',
password: '123456'
}
};
const generator = login(action);
// THE CALL YIELD
generator.next();
const expectedResult = put({ type: 'LOGIN_FAIL', payload: { error: 'user not found' } });
expect(generator.next().value).to.be.eql(expectedResult); // FAIL BECAUSE I GET A LOGIN_SUCCESS INSTEAD OF A FAIL ONE
});
});
});