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

标签 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))
      })
  }
}

我怎样才能 mock 这样的事情?我是否应该仅出于测试该方法的目的而设置测试电子邮件和密码? 推荐的方法是什么?

谢谢!

最佳答案

使用 jest,您可以像这样模拟该函数。

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

这会将 firebaseAuth 模块中的 signInWithEmailAndPassword 替换为一个函数,该函数根据您在测试中传递给函数的密码返回已解决或拒绝的 Promise。

请查看docs关于如何在测试中处理 promise

关于javascript - 使用 Jest 对依赖于 http 调用的代码进行单元测试的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41732058/

相关文章:

c# - 模拟 IList 的单元测试方法

unit-testing - .NET 中的单元测试 : How to Mock Entity Data Provider

javascript - 在summernote中从外部工具栏插入图像

javascript - Highcharts:从具有多个系列的图中选择单个系列

javascript - 当我添加到数组时, slim 列表不会更新

java - 在Eclipse中更改单元测试包名称与相应的生产代码包

javascript - 联合两个 svg <path> 与 js

android - RxJava 的模拟单元测试

python - 模拟在方法调用后更改实例变量的 python 类?

c# - 伪造/模拟接口(interface)会出现 "no default constructor"错误,这怎么可能?