使用 Jest 对依赖于 http 调用的代码进行单元测试的最佳方法?

Mol*_*árk 2 javascript unit-testing mocking mocha.js jestjs

假设我有一个与 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))
      })
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能嘲笑这样的事情?我是否应该仅仅为了测试方法而设置测试电子邮件和密码?什么是推荐的方式?

谢谢!

And*_*rle 5

开玩笑,你可以像这样模拟这个函数。

jest.mock('pathToFireBase', () => ({
   signInWithEmailAndPassword(email,password){
     if(password === 'correct') {
       return Promise.resolve({name: 'someUser'})
     } else {
       return Promise.reject({error: 'someError'})
     }
   }
}))
Run Code Online (Sandbox Code Playgroud)

这将取代signInWithEmailAndPassword你在firebaseAuth与一个功能模块,要么返回取决于你传递给函数在测试中的密码解决或拒绝承诺。

请查看有关如何在测试中处理承诺的文档