Edi*_*ons 9 facebook rspec ruby-on-rails devise
我正在使用设计配置使用omniauth facebook登录集成.sign_in从我的spec/request测试中调用方法时,我得到:
undefined method `env' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
规格:
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
Run Code Online (Sandbox Code Playgroud)
你的代码看起来很像我的 - 我试图使用Capybara和Devise TestHelper函数,事实证明你不能,按照https://github.com/plataformatec/devise/wiki/How-To:-Test - 与水豚.在该页面上解释了推荐的方法,它对我有用.
要清楚,这就是我所做的 - 在spec_helper.rb:
RSpec.configure do |config|
config.include Warden::Test::Helpers
end
Warden.test_mode!
Run Code Online (Sandbox Code Playgroud)
在我的代码中,简单地说 - logout :user.
这就是为什么,根据Devise wiki,你不能使用sign_out:
如果你想知道为什么我们不能只使用Devise的内置sign_in和sign_out方法,那是因为这些需要直接访问请求对象,这在使用Capybara时是不可用的.要将两种方法的功能捆绑在一起,您可以创建一个帮助方法.
粗略地说,这意味着,例如,MiniTest将表示request(@request)的对象作为实例变量添加到测试用例类中,而Capybara则不会发生这种情况.我没有查看代码以更准确地了解详细信息,但基本上,Warden希望找到此对象然后访问登录凭据的cookie商店.有了Capybara/RSpec,我预计这不会发生.
| 归档时间: |
|
| 查看次数: |
13601 次 |
| 最近记录: |