【问题标题】:Integration test with rspec and devise sign_in env使用 rspec 进行集成测试并设计 sign_in env
【发布时间】:2011-12-08 11:03:39
【问题描述】:

我正在使用配置为使用omniauth facebook 登录集成的设计。 从我的spec/request 测试中调用sign_in 方法时,我得到:

undefined method `env' for nil:NilClass

规格:

describe FacebookController do
  include Devise::TestHelpers

  it "should display facebook logged in status" do
    @user = User.create(:id => "123", :token => "token")
    sign_in @user
    visit facebook_path
  end
end

【问题讨论】:

标签: ruby-on-rails facebook rspec devise


【解决方案1】:

您的代码看起来很像我的 - 我试图使用 Capybara 和 Devise TestHelper 函数,但事实证明你不能,每个 https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara。该页面上解释了推荐的方法,它对我有用。

明确地说,这就是我所做的 - 在spec_helper.rb

RSpec.configure do |config|
  config.include Warden::Test::Helpers
end
Warden.test_mode!

在我的代码中,简单地说 - logout :user

这就是为什么,根据 Devise wiki,你不能使用 sign_out

如果您想知道为什么我们不能只使用 Devise 的内置 sign_in 和 sign_out 方法,这是因为这些方法需要直接访问请求对象,而使用 Capybara 时不可用。要将两种方法的功能捆绑在一起,您可以创建一个辅助方法。

这大致意味着虽然使用MiniTest 表示请求的对象 (@request) 作为实例变量添加到测试用例类中,但 Capybara 不会发生这种情况。我没有查看代码以更准确地了解详细信息,但基本上,Warden 希望找到此对象,然后访问登录凭据所在的 cookie 存储。对于 Capybara/RSpec,我预计不会发生这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多