cucumber - 回调重定向不保留 session

标签 cucumber capybara omniauth omniauth-twitter

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

在回调中,当我执行sign_in @user时,它成功创建用户并登录...current_user已设置。但是当我执行 redirect_to request.env['omniauth.origin'] || 时'/',在接下来的操作中,current_user 现在为零。

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

知道为什么会发生这种情况吗?

/features/support/env.rb:

Cucumber::Rails::Database.javascript_strategy = :truncation

场景:

@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 returns a user with provider "(.*?)" and uid "(.*?)" and nickname "(.*?)"$/) do |provider, uid, nickname|
  OmniAuth.config.test_mode = true

 OmniAuth.config.add_mock(provider.to_sym, {
     :uid => uid,
     :info => {
       :name => nickname
     }
   })
end

Then(/^I should be logged in as "(.*?)"$/) do |nickname|
  expect(page).to have_content(nickname)
end

验证回调:

def twitter
  @user = User.from_omniauth(request.env["omniauth.auth"]) # this works-- I get the mock
  sign_in @user
  puts ">> in auth callback: just signed in user #{current_user.id}"        
  redirect_to request.env['omniauth.origin'] || '/'
end

Controller :

def new
  puts ">> in my_controller#new: current_user = #{current_user.id if current_user}"
end

cucumber 输出:

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_in方法时,您确实使用using初始化了新变量user(例如.@user)

关于cucumber - 回调重定向不保留 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586103/

相关文章:

maven - 直接从可执行 jar 运行 Cucumber 测试

ruby-on-rails - Capybara webkit 在 RSpec 测试中将我重定向到 example.com

ruby-on-rails - 从 Capybara rquest 规范访问 View 助手方法

ruby-on-rails-3.1 - 使 Rails 3.1 的 has_secure_password 与 OmniAuth 配合使用

ruby-on-rails - OmniAuth 创建中的 DangerousAttributeError 由 ActiveRecord 定义

ruby-on-rails - 为什么 cucumber 场景只有在我运行完整的测试套件后才会失败?

ruby - 从 rake 文件为另一个应用程序执行测试

javascript - 仅在 Jenkins 上运行 Cucumber 的 javascript 表单超时

ruby - 选中表格中的复选框

ruby-on-rails - Facebook 身份验证数据返回零,姓名和电子邮件除外