启用了javascript的rspec功能规范抛出错误"无法使用id"

时间:2015-01-11 13:22:11

标签: ruby-on-rails-4 rspec selenium-webdriver capybara poltergeist

我知道有关于这个问题的答案,但我还没有找到问题的答案。请考虑以下规范:

feature "Order Feature", :js do
  let!(:product) { create :product }

  scenario "buy a product" do
    visit product_path(product)
  end
end

以上规范将抛出错误如下:

Couldn't find Product with 'id'=3

我尝试过以下解决方案但没有人帮助过:

  • 关闭交易装置
  • 带有截断策略的数据库清理器,示例启用了:jsreference
  • 启用了事务处理设备的共享连接(reference

我使用过selenium-webdriver和poltergeist,两者似乎都有相同的症状,可归纳如下:

如果我调试规范,我可以在控制台上看到正在创建的产品,但我看不到浏览器中的任何产品。

我已经阅读了几篇文章,这篇文章与capybara相关,是在不同于规范的线程上运行的。但我还没有找到任何帮助我解决这个问题的事情。


为了完整性,我使用以下代码进行共享连接方法:

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end

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

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

Spring.after_fork do
  # 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
end

我将以下内容用于数据库清理方法:

RSpec.configure do |config|
  config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js) do
    DatabaseCleaner.strategy = :truncation
  end

  config.around(:each) do |example|
    DatabaseCleaner.cleaning do
      example.run
    end
  end
end

0 个答案:

没有答案