【发布时间】:2017-05-08 00:27:05
【问题描述】:
我是 redux 和一般编程的新手,我无法理解某些单元测试概念。
我在 redux 中有一些异步操作,其中涉及对第三方 API 的调用(来自“amazon-cognito-identity-js”节点模块)。
我已将外部 API 调用封装在一个 Promise 函数中,并从“实际”动作创建者调用此函数。因此,对于测试,我只想对 externalAWS() 函数的结果进行存根,以便检查是否正在调度正确的操作。
我正在为我的中间件使用 redux-thunk。
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 并创建“易于模拟/存根”的东西。但仍然遇到如何正确存根此函数的问题。
【问题讨论】:
标签: node.js unit-testing redux amazon-cognito redux-thunk