使用RSpec请求规范和Capybara设计不在测试环境中工作的身份验证

使用RSpec请求规范和Capybara设计不在测试环境中工作的身份验证,rspec,devise,ruby-on-rails-3.2,capybara,fabrication-gem,Rspec,Devise,Ruby On Rails 3.2,Capybara,Fabrication Gem,我一直在努力让我的要求生效。我已经尝试了许多不同的方法,我通过谷歌找到了这些方法。以下是我在请求规范中分别尝试的以下帮助程序: #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

我一直在努力让我的要求生效。我已经尝试了许多不同的方法,我通过谷歌找到了这些方法。以下是我在请求规范中分别尝试的以下帮助程序:

#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
我在下面的请求规范中分别尝试了上述两种登录方法:

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
测试将通过,但根路径不显示登录用户的登录页。它显示公共登录页。我尝试过使用binding.pry进行调试,并尝试在测试环境中手动登录,但我一直收到“无效电子邮件或密码”错误。我已经检查过很多次了,但我一直在使用伪造公司的正确电子邮件和密码

我也尝试过这里提出的解决方案:


任何帮助都将不胜感激。不知道问题出在哪里。是制造宝石、设计、RSpec还是水豚?

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

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

但是我们的问题之间有区别:我的错误突然出现,所以我只是创建了一个单独的分支,在该分支中我将master恢复为上一个commit,并且我发现我以某种方式更改了spec_helper.rb(我实现了禁用garabage收集器)。我恢复了提交,然后我的测试通过了

我想你可以试试下面的东西:

1) 通过运行
bundle-outleted

2) 尝试将
访问根路径
更改为
访问“/”

3) 启动rails c测试,创建一个测试用户,并确保保存的密码与测试的密码匹配


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

在两个let中创建用户!让我来。我已经签入了pry,实际创建了“用户”,并返回了正确的密码。您解决了吗?怎么用?我突然犯了完全相同的错误。@ExiRe还没有解决它。你也在使用捏造吗?