2

在进行将使用 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

问题是单击“登录”按钮返回到带有“无效用户/密码”组合的页面(好像用户不在数据库中)。问题是显然使用确实在数据库中并且密码是正确的(测试“可以验证用户”通过)。

在单击“登录”按钮之前,我截取了屏幕截图,并且正确填充了字段。我试图在 before 块内创建用户,但它也不起作用。

登录页面没有任何特别之处,没有 javascript 或任何东西。只是一个普通的形式发布到服务器。

有任何想法吗?

4

1 回答 1

7

不久前我在使用rspecand时发生了这种情况poltergeist。问题是phantomjs线程无法看到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 点找到更多解释。

于 2013-05-06T20:33:27.917 回答