3

我有以下规格:

# 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

我的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

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

当我save_and_open_page在它之前做一个正确的事情时,页面出现了零 CSS 和大概没有 JS 的页面。由于某种原因,它没有读取资产。我认为当您运行测试时,它会像在开发模式下一样读取资产。我真的需要帮助。

4

1 回答 1

6

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

请点击链接查看答案。它必须与事务性装置和启用DatabaseCleaner宝石有关。两次陈述答案没有任何好处,我将把那个作为规范答案。

UPDATE

实际上这个问题与在 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

而是将其放在文件中的Spork.each_run块中spec_helper.rb

于 2013-05-03T20:59:04.897 回答