无法使用FactoryGirl的用户/数据登录

时间:2013-05-02 18:59:13

标签: ruby-on-rails capybara factory-bot poltergeist

在进行我将使用JS的测试之前,我必须先登录用户。登录页面确实有效(此测试除外)。

require 'spec_helper'
require 'capybara/poltergeist'
include Capybara::DSL
Capybara.javascript_driver = :poltergeist    

describe "Application", js: true  do
  describe "when logged in", js: true do
    let(:user) { FactoryGirl.create(:user) }
    before do
      visit signin_path
      fill_in "Email", with: user.email
      fill_in "Password", with: user.password
      click_button "Sign in"
    end
    it "can authenticate user" do
      User.all.first.authenticate(user.password).email.should == user.email
    end
  end
end

问题是点击"登录"按钮返回到页面,"无效的用户/密码"组合(就好像用户不在数据库中)。事实是,显然这个用途确实在数据库中,密码是正确的(测试"可以验证用户"通过)。

我在点击"登录"之前拍了一张截图。按钮和字段正确填充。我试图在前面的块中创建用户,但它也没有工作。

登录页面没有任何特殊内容,没有javascript或任何内容。只是发送到服务器的普通表单。

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

在使用rspecpoltergeist之前,我发生了这种情况。问题是phantomjs线程无法在db中看到FactoryGirl创建的记录。要解决此问题,您必须在spec_helper.rb中添加以下代码来配置您的数据库连接。

class ActiveRecord::Base
  mattr_accessor :shared_connection
  @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end

# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection

您可以在第3点找到更多解释here