Cucumber 回调重定向不保留会话

Cucumber 回调重定向不保留会话,cucumber,capybara,omniauth,omniauth-twitter,Cucumber,Capybara,Omniauth,Omniauth Twitter,我有一个场景,当我使用真正的omniauth时效果很好,但当我使用cucumber/capybara中的mock auth运行它时失败了 在回调中,当我登录@user时,它会成功创建用户并登录当前用户。但是,当我随后执行将_重定向到request.env['omniauth.origin']| | |/'时,在接下来的操作中,当前_用户现在为零 我已经通过截图/暂停浏览器确认它无法使用模拟身份验证。firefox和chrome驱动程序中也会出现同样的错误 你知道为什么会这样吗 /功能/支持/en

我有一个场景,当我使用真正的omniauth时效果很好,但当我使用cucumber/capybara中的mock auth运行它时失败了

在回调中,当我登录@user时,它会成功创建用户并登录<已设置代码>当前用户。但是,当我随后执行
将_重定向到request.env['omniauth.origin']| | |/'
时,在接下来的操作中,
当前_用户
现在为零

我已经通过截图/暂停浏览器确认它无法使用模拟身份验证。firefox和chrome驱动程序中也会出现同样的错误

你知道为什么会这样吗

/功能/支持/env.rb:

Cucumber::Rails::Database.javascript_策略=:截断 情景:

@javascript
Scenario:
    Given I am on the home page
    When I press "Login"
    And I should see "Login with Twitter" in the selector "#login-modal"
    Given Omniauth returns a user with provider "twitter" and uid "1" and nickname "foo"    
    When I login with Twitter
    Then I should be logged in as "foo"
步骤定义:

Given(/^Omniauth)返回具有提供程序“(.*)”和uid“(.*)”以及昵称“(.*)”$/)的用户,提供程序,uid,昵称|
OmniAuth.config.test_mode=true
OmniAuth.config.add_mock(provider.to_sym{
:uid=>uid,
:info=>{
:name=>昵称
}
})
结束
然后(/^I应以“(.*?”$/)do|昵称身份登录|
期望(第页)。有_内容(昵称)
结束
身份验证回调:

def twitter
@user=user.from_omniauth(request.env[“omniauth.auth”])#这很有效--我得到了模拟
在@user中登录
将“>>放入身份验证回调:刚刚登录用户#{current_user.id}”
将_重定向到request.env['omniauth.origin']| |'/'
结束
控制器:

def新建
将“>>放入my_controller#new:current_user=#{current_user.id if current_user}”
结束
黄瓜产量:

Given Omniauth returns a user with provider "twitter" and uid "1" and nickname "foo" 
>> in auth callback: just signed in user 1
>> in my_controller#new: current_user =
When I login with Twitter                                                                 
Then I should be logged in as "foo"                                                  
  expected to find text "foo" in [redacted] (RSpec::Expectations::ExpectationNotMetError)

您正在获取用户并将其收集到新变量
@user
,但是当您再次调用
sign\u in
方法时,您确实使用(例如
@user
)初始化了新变量user

此问题的任何解决方案?你找到什么了吗?好吧,请检查请求的标题,以获取真实和模拟,可能你应该在模拟中添加一些内容