【问题标题】:Devise Authentication not working in Test Environment with RSpec Request Spec and Capybara使用 RSpec Request Spec 和 Capybara 设计身份验证在测试环境中不起作用
【发布时间】:2013-02-14 18:00:21
【问题描述】:

我一直在试图让我的请求规范正常工作。我尝试了许多通过 Google 和 SO 找到的不同方法。以下是我在请求规范中单独尝试过的以下助手:

#spec/support/devise_request_spec_support.rb
module DeviseRequestSpecSupport

  def login(user)
    post user_session_path, login: user.email, password: 'foobar'
  end
end

#spec/support/utilities.rb
include ApplicationHelper

def valid_login(user)
  fill_in "user[email]", with: user.email
  fill_in "user[password]", with: 'foobar'
  click_button "Sign in"
end

def login(user)
  visit root_path
  valid_login(user)
end

我在下面的请求规范中分别尝试了以上#login 方法:

require 'spec_helper'

describe "Company Admin Dashboard", js: true do
    let(:user) { Fabricate(:company_admin) }

    before do
        login(user)
        poll = Fabricate(:poll)
        poll.send_to_all_users
    end

  describe "interacting with the poll box" do
    it "displays sent poll in poll box" do
      visit root_path
    end
  end
end

测试将通过,但 root_path 不显示登录用户的登录页面。它显示了公共登录页面。我尝试使用 binding.pry 进行调试并尝试在测试环境中手动登录,但我不断收到“无效的电子邮件或密码”错误。我检查了很多次,但我一直使用的是 Fabricated company_admin 的正确电子邮件和密码。

我也尝试过这里提出的解决方案:https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara

任何帮助将不胜感激。不确定问题出在哪里。是 Fabrication gem、Devise、RSpec 还是 Capybara?

【问题讨论】:

  • 你解决了吗?如何?我突然有完全相同的错误。
  • @ExiRe 还没有解决它。你也在使用 Fabrication 吗?

标签: rspec devise ruby-on-rails-3.2 capybara fabrication-gem


【解决方案1】:

您可以尝试使用“让!”而不是“让”来创建用户。怀疑您尝试登录时尚未创建用户,因为您使用的是'let'的惰性版本。

【讨论】:

  • 用户是在两个 let!然后让。我已经检查了 pry 并且实际上创建了“用户”并且正在返回正确的密码。
【解决方案2】:

我曾经遇到过同样的错误。我的错误突然出现,这是一个很大的惊喜。您应该注意到我有相同的宝石要测试:Devise、RSpec、Capybara 和 FactoryGirl(而不是 Fabrication)。

但是我们的问题之间存在差异:我的错误突然出现,所以我只是创建了一个单独的分支,我将 master 恢复到以前的提交,我发现我以某种方式更改了 spec_helper.rb(我实现了禁用垃圾收集器)。我恢复了提交,然后我的测试通过了。

我想你可以试试接下来的事情:

1) 通过运行 bundle outdated 确保您用于测试的所有 gem 都是最新的

2) 尝试将visit root_path 更改为visit '/'

3) 启动rails c test,创建一个测试用户并确保保存的密码与测试密码匹配。 Check out here how to do that

4) 如果没有任何帮助,请尝试使用 FactoryGirl 而不是 Fabrication

【讨论】:

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