如何使用 Rails 和 minitest 模拟 OmniAuth 哈希?

2023-11-28

我正在使用 Rails 5 和 minitest。我想模拟登录到我的会话控制器,它依赖于omniauth(我使用Google和FB进行登录)。我的控制器测试中有这个,test/controllers/rates_controller_test.rb,

 class RatesControllerTest < ActionDispatch::IntegrationTest

  # Login the user
  def setup
    logged_in_user = users(:one)
    login_with_user(logged_in_user)
  end

然后我尝试在我的测试助手 test/test_helper.rb 中设置登录,

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  def setup_omniauth_mock(user)
    OmniAuth.config.test_mode = true
    omniauth_hash = { 'provider' => 'google',
                      'uid' => '12345',
                      'info' => {
                         'name' => "#{user.first_name} #{user.last_name}",
                          'email' => user.email,
                      },
                      'extra' => {'raw_info' =>
                                      { 'location' => 'San Francisco',
                                        'gravatar_id' => '123456789'
                                      }
                      }
    }

    OmniAuth.config.add_mock(:google, omniauth_hash)
  end

  # Add more helper methods to be used by all tests here...
  def login_with_user(user)
    setup_omniauth_mock(user)
    post sessions_path
  end

但是,当我运行控制器测试时,当在会话控制器中评估此行时,我得到一个 nil 值...

user = User.from_omniauth(env["omniauth.auth"])

上面,'env["omniauth.auth"]' 的计算结果为零。


The OmniAuth 文档 state

当您尝试测试 OmniAuth 时,您需要设置两个环境变量

并提供使用 RSpec 的示例

before do
  Rails.application.env_config["devise.mapping"] = Devise.mappings[:user] # If using Devise
  Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
end

就您而言,您似乎可能需要设置

Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:google]

in your setup_omniauth_mock方法,调用后OmniAuth.config.add_mock.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Rails 和 minitest 模拟 OmniAuth 哈希? 的相关文章

随机推荐

  • 将对象反序列化为现已签名和版本控制的程序集

    我曾经使用 BinaryFormatter c 序列化树视图 执行此操作并包含所有可序列化类的程序集现在具有强名称并已签名 并且还获得了新的版本号 但是 实现没有改变 当我尝试反序列化 byte 数组时 该行 TreeViewData bi
  • 如何使用 Python 和 Numpy 计算 r 平方?

    我正在使用 Python 和 Numpy 来计算任意次数的最佳拟合多项式 我传递 x 值 y 值和我想要拟合的多项式次数 线性 二次等 的列表 这很有效 但我还想计算 r 相关系数 和 r 平方 确定系数 我将我的结果与 Excel 的最佳
  • javascript 检查结束日期是否大于或等于开始日期

    是否可以检查 Javascript 中的结束日期是否大于或等于开始日期 我的日期是格式为 dd mm yyyy 的字符串 try this var startDate 05 01 2011 var endDate 09 01 2011 va
  • x86 上存储到加载转发失败的成本是多少?

    在最新的 x86 架构上 存储到加载转发失败的成本是多少 特别是 存储到加载转发会失败 因为加载部分与较早的存储重叠 或者因为较早的加载或存储跨越某些导致转发失败的对齐边界 当然存在延迟成本 它有多大 是否还存在吞吐量成本 例如 失败的存储
  • 在 Windows 8 中将用户重定向到桌面浏览器

    如果用户使用 Windows 8 RT 浏览器访问我的网页 是否有办法强制或提示用户使用 Windows 8 桌面浏览器 我希望能够使用 Silverlight 等插件 是的 您可以提示用户切换到桌面版本 微软将其添加为需要它的网站的后备
  • 如何在 Git 历史记录中 grep(搜索)已提交的代码

    我过去删除过一个文件或文件中的某些代码 我可以搜索内容 而不仅仅是提交消息 吗 一个非常糟糕的解决方案是 grep 日志 git log p grep
  • 将子 iframe 中的事件附加到父窗口中的处理程序

    我无法直接访问此 iframe 的源代码 因此如果可能的话 我想这样做 我有一个由 JS 生成的 iframe 里面有一个提交按钮和一个取消按钮 提交按钮工作正常 但我希望取消按钮关闭包含 iframe 的此模式 我还希望提交按钮发送 th
  • 如何在 ASP.NET 5 Identity 中设置PasswordHasherCompatibilityMode.IdentityV3?

    目前看来默认设置为PasswordHasherCompatibilityMode IdentityV2这是 ASP NET 5 中的 HMAC SHA1 我尝试创建一个实例PasswordHasherOptions添加到服务 DI 但无法使
  • 用户控制验证组问题

    我在页面上有两个用户控件实例 两者都有字段和一个提交按钮 我已经在字段和验证器上设置了验证组 但由于某种原因 在验证两个用户控件的验证器时会触发 这个方法也有效 Dim valGroup String format 0 validation
  • GCC默认main返回值不为零

    我有一些没有从 main 显式返回的 C 程序 如下所示 int main int argc char argv blah blah 如果我使用 GCC 4 6 3 和以下选项编译它们 gcc file c Wall Wextra 程序不会
  • ImmutableList.builder() 错误?

    我刚刚开始学习番石榴 我注意到一些奇怪的事情ImmutableList builder 这不能编译 List
  • 根据变量快速调整窗口大小

    我有一个NSViewController和一个变量num 我想根据该变量动态更改窗口的大小 有什么办法可以快速做到这一点吗 假设您的窗口有一个名为 window 的 IBOutlet 并且您的动态号码名为 myDynamicNumber f
  • Scala 2.10 中的 Iterator.size 错误?

    这是正常的吗 scala gt val x Iterator List String str lol Iterator List String non empty iterator scala gt x size res1 Int 1 sc
  • 在 iFrame 中显示的 PDF 上绘制坐标

    首先 我很感激我的要求相当 雄心勃勃 但非常感谢任何帮助 因为我不确定继续进行的最佳方式 在我的网站 使用 PHP MySQL 构建 上 用户上传 PDF 后 我想在页面上内嵌显示 PDF 我假设在 iFrame 中 然后我需要他们能够在
  • 处理 jQuery.getScript 中的错误

    jQuery 的获取脚本函数似乎不支持错误回调函数 我不能在这里使用全局 ajax 错误处理代码 本地错误函数将是理想的选择 回调获取 data textStatus 的文档似乎不正确 回调两者都没有获取 关于如何检测 getScript
  • Flask 上下文堆栈的用途是什么?

    我已经使用请求 应用程序上下文一段时间了 但没有完全理解它是如何工作的或者为什么它是这样设计的 当涉及到请求或应用程序上下文时 堆栈 的目的是什么 这两个堆栈是独立的 还是同一个堆栈的一部分 请求上下文是压入堆栈 还是堆栈本身 我可以在彼此
  • 像在android市场中一样滑动标签栏[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有谁知道如何像android市场中那样实现该栏 类别 特色 最高付费 我也在新版本的SuperUser中看到了它 所以我知道它可以完成 谢谢你的回复 感谢塞尔文的回复 按照建议查
  • 以最佳方式将矩形装配在一起

    我想知道是否有人知道任何适合将 N 个未知大小的矩形组装成可能的最小包含矩形的算法 我所说的最佳是指减少生成的包含矩形中剩余的空白量 我想用它从一系列图像生成 css 精灵 非常感谢 Ian 我认为你所描述的是 二维装箱 问题的一个变体 唯
  • 隐式转换:const 引用与非 const 引用与非引用

    考虑这段代码 struct A struct B B const A void f B cout lt lt f lt
  • 如何使用 Rails 和 minitest 模拟 OmniAuth 哈希?

    我正在使用 Rails 5 和 minitest 我想模拟登录到我的会话控制器 它依赖于omniauth 我使用Google和FB进行登录 我的控制器测试中有这个 test controllers rates controller test