使用 Jest 对依赖于 http 调用的代码进行单元测试的最佳方法?
Best way to unit test code that depends on http calls using Jest?
假设我有一个与 firebase 身份验证系统一起使用的登录和注销功能。
一个单元如何测试这样的方法? firebase 应用程序实例被导入并用于登录功能。
代码片段(如果需要):
export function login(data) {
return dispatch => {
return firebaseAuth.signInWithEmailAndPassword(data.emailField, data.passField)
.then(user => {
dispatch({type: "SET_CURRENT_USER", payload: user})
user.getToken().then(token => setAuthToken(token))
localStorage.setItem("currentUser", JSON.stringify(user))
})
}
}
我怎么能嘲笑这样的东西?我是否应该仅仅为了测试该方法而设置一个测试电子邮件和密码?
推荐的方法是什么?
谢谢!
用 jest 你可以像这样模拟函数。
jest.mock('pathToFireBase', () => ({
signInWithEmailAndPassword(email,password){
if(password === 'correct') {
return Promise.resolve({name: 'someUser'})
} else {
return Promise.reject({error: 'someError'})
}
}
}))
这会将 firebaseAuth
模块中的 signInWithEmailAndPassword
替换为 return 已解决或已拒绝承诺的函数,具体取决于您在测试中传递给该函数的密码。
请查看docs如何在测试中处理承诺
假设我有一个与 firebase 身份验证系统一起使用的登录和注销功能。
一个单元如何测试这样的方法? firebase 应用程序实例被导入并用于登录功能。
代码片段(如果需要):
export function login(data) {
return dispatch => {
return firebaseAuth.signInWithEmailAndPassword(data.emailField, data.passField)
.then(user => {
dispatch({type: "SET_CURRENT_USER", payload: user})
user.getToken().then(token => setAuthToken(token))
localStorage.setItem("currentUser", JSON.stringify(user))
})
}
}
我怎么能嘲笑这样的东西?我是否应该仅仅为了测试该方法而设置一个测试电子邮件和密码? 推荐的方法是什么?
谢谢!
用 jest 你可以像这样模拟函数。
jest.mock('pathToFireBase', () => ({
signInWithEmailAndPassword(email,password){
if(password === 'correct') {
return Promise.resolve({name: 'someUser'})
} else {
return Promise.reject({error: 'someError'})
}
}
}))
这会将 firebaseAuth
模块中的 signInWithEmailAndPassword
替换为 return 已解决或已拒绝承诺的函数,具体取决于您在测试中传递给该函数的密码。
请查看docs如何在测试中处理承诺