Я новичок в области редукции и программирования в целом, и у меня возникают проблемы с переворачиванием головы вокруг определенных концепций тестирования модулей.Тестирование async redux с вызовами сторонних API
У меня есть некоторые асинхронные действия в redux, которые включают вызовы стороннего API (из модуля узлов amazon-cognito-identity-js).
Я завернул внешний API-вызов в функцию обещания, и я вызываю эту функцию из «фактического» создателя действия. Поэтому для тестирования я просто хочу заглушить результат функции externalAWS()
, чтобы проверить, правильно ли отправлены правильные действия.
Я использую утилизацию для моего промежуточного программного обеспечения.
import { AuthenticationDetails,
CognitoUser
} from 'amazon-cognito-identity-js';
export function externalAWS(credentials) {
//This is required for the package
let authenticationDetails = new AuthenticationDetails(credentials);
let cognitoUser = new CognitoUser({
//Construct the object accordingly
})
return new Promise ((resolve, reject) => {
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: result => {
resolve(result);
},
onFailure: error => {
reject(error)
}
})
}
}
export function loginUser(credentials) {
//return function since it's async
return dispatch => {
//Kick off async process
dispatch(requestLogin());
externalAWS(credentials)
.then((result) => {
dispatch(receiveLogin(result.getAccessToken().getJwtToken(), credentials.username))
})
.catch((error) => {
dispatch(failedLogin(error.message, etc))
})
}
}
У меня пока нет тестового кода, потому что я действительно не уверен, как подойти к этому. Все примеры связаны с издевательством HTTP-запроса, который, как я знаю, составляет , к чему это сводится, поэтому я должен проверять HTTP-запросы в своем браузере и издеваться над ними напрямую?
Это еще больше осложняется тем фактом, что второй аргумент authenticateUser
не является даже обычным обратным вызовом, а объектом с обратными вызовами как его значениями.
Может ли кто-нибудь предложить какой-либо совет относительно того, правильно ли я намерен в модуле тестировать функцию асинхронной работы и как я должен подходить к ней? Спасибо.
Редактировать: Я тестирую в Jest.
Edit2: Заголовки запросов First POST request, Second POST request
Edit3: Разделить функции, стараясь изо всех сил, чтобы изолировать внешний API и создать что-то, что является "легко насмехаться/окурка состоянии. Но все еще проблема с тем, как правильно заглушить эту функцию.
Спасибо, это помогает объяснить идеи, лежащие в основе тестирования асинхронных действий. Тем не менее, мой тест по-прежнему терпит неудачу, поскольку исходная функция 'authenticateUser' все еще работает. Я знаю это, потому что он не работает с исключением из документов для этого API («Пользователь не найден», предположительно из «fakeUser»). –
Кстати, насмехаясь над ответом, я тоже наименее знаком, поэтому я не знаю, как устранить проблему здесь. –
Какой url запрашивается при вызове api? – therewillbecode