使用 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如何在测试中处理承诺