Rya*_*yan 46 ruby rspec ruby-on-rails capybara
似乎最常被接受的处理Selenium和测试的方法是避免使用事务夹具,然后在测试/场景之间使用像database_cleaner这样的东西.我最近遇到了以下文章,建议执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
对于性能而言,这似乎比替代品更好.有没有人有理由不这样做?
hsg*_*ert 33
实际上它有问题.例如,如果您使用gem mysql2,您将开始看到一些错误,例如:
Mysql2::Error This connection is still waiting for a result
Run Code Online (Sandbox Code Playgroud)
请改用它.它由迈克·佩勒姆(Mike Perham)撰写,全部归功于他.
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || ConnectionPool::Wrapper.new(:size => 1) { retrieve_connection }
end
end
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
Run Code Online (Sandbox Code Playgroud)
你也需要安装gem connection_pool
.这将使您免于许多麻烦.
nmo*_*ott 15
这个解决方案由Jose Valim编写 - 在Rails社区中受到尊重,并且是Rails核心团队的成员.如果有问题,我怀疑他会建议使用它.我个人没有任何问题.
请注意,如果您使用Spork,则需要在each_run块中才能工作.
FWIW - 我在Postgres上有上述补丁的间歇性水豚测试问题.@hsgubert下面的Mike Perham解决方案似乎解决了这些问题.我现在使用那个解决方案.