Capybara断言在Poltergeist下失败了

AKW*_*KWF 3 testing rspec ruby-on-rails capybara poltergeist

我有以下规格:

# MUST BE TESTED WITH JAVASCRIPT. As you can see before, it is allowing
# the Log Out link. On a real page, that element is hidden.
it "logs out a user" do
  user = login_user
  click_link user.email
  click_link "Log Out"
  assert page.has_content?('Logged out')
  assert page.has_content?('Company Profile')
end
Run Code Online (Sandbox Code Playgroud)

我的login_user方法在我的spec_helper.rb文件中,如下所示:

def login_user(admin = false)
  user = FactoryGirl.create(:user, :admin => admin)
  visit login_path
  fill_in 'Email', :with => user.email
  fill_in 'Password', :with => user.password
  click_button 'Go'
  assert page.has_content?('Logged in')
  user
end
Run Code Online (Sandbox Code Playgroud)

assert当我添加, js: true到我的规范时,最后一次失败.

当我save_and_open_page在它之前做一个正确的时候,Up就会出现没有CSS的页面,因此可能没有JS.由于某种原因,它不是在阅读资产.我认为当你运行测试时,它会像开发模式一样读取资产.我真的需要帮助.

AKW*_*KWF 6

我在这个问题中找到了答案.这非常棘手.我仍然不知道为什么这首先失败了,但不用说RSpec/Capybara/PhantomJS/Poltergeist/Guard/Spork/FactoryGirl有很多活动部件.

请点击链接查看答案.它必须与事务夹具和启用DatabaseCleaner宝石.两次说出答案没有任何好处,我会把那个作为规范的答案.

UPDATE
Run Code Online (Sandbox Code Playgroud)

实际上这个问题与如何在Poltergeist/PhantomJS下不共享数据库连接有关.Plataformatec的员工在他们的博客上有一个优秀的解决方案,不涉及使用DatabaseCleaner gem.

重要的提示

对于同时使用Spork的Postgres用户,博客解决方案将无法按照规定运行.换句话说,如果您将shared_db_connection.rb文件放在spec/support目录中,您将收到一条PG::Error connection closed消息.保留文件spec/support但删除此行:

  ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
Run Code Online (Sandbox Code Playgroud)

而是将其放在您Spork.each_runspec_helper.rb文件块中.