我知道有关于这个问题的答案,但我还没有找到问题的答案。请考虑以下规范:
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
我尝试过以下解决方案但没有人帮助过:
我使用过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