在进行我将使用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或任何内容。只是发送到服务器的普通表单。
有什么想法吗?
答案 0 :(得分:7)
在使用rspec
和poltergeist
之前,我发生了这种情况。问题是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。