我正在使用Ruby 1.9.2,Rails 3.1,Rspec,Postgres和Spork,但我无法让它们在一起玩得很好。
第一次运行规范(Spork在后台运行)运行正常。但是,当我第二次运行规范时,它失败了:
Failure/Error: Unable to find matching line from backtrace
PGError:
no connection to the server
# /Users/tom/.rvm/gems/ruby-1.9.2-p180@grapi/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:272:in `exec'
etc....
任何提示赞赏!
答案 0 :(得分:8)
您可能也启用了Devise。
此处描述了您的问题:https://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujutsu 更具体地说,对于rails 3.1:https://gist.github.com/1054078
spec_helper.rb
和 env.rb
中的prefork块的开头应如下所示:
Spork.prefork do
Spork.trap_method(Rails::Application, :reload_routes!)
Spork.trap_method(Rails::Application::RoutesReloader, :reload!)
...
祝你好运!
答案 1 :(得分:3)
如果您正在使用Factory Girl,请不要使用'factory_girl_rails'宝石,只需使用'factory_girl'。
Spork.each_run do
FactoryGirl.definition_file_paths = [
File.join(Rails.root, 'spec', 'factories')
]
FactoryGirl.find_definitions
end
对于使用Factory Girl,Machinist或Shoulda Matchers的任何人,请务必阅读Spork的trap_method:https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu
它解决了我在测试时使用Spork和删除的PostgreSQL连接的问题。
答案 2 :(得分:0)
你必须运行spork --bootstrap
并在将一些配置插入spec_helper.rb文件后,spork会知道您的rails配置。
使用RSpec时,可以尝试将以下代码添加到spec_helper文件中:
require 'rubygems'
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.mock_with :rspec
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
# Needed for Spork
ActiveSupport::Dependencies.clear
end
end
Spork.each_run do
load "#{Rails.root}/config/routes.rb"
Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }
end
答案 3 :(得分:0)
您可以尝试将其添加到Spork.each_run
回调并检查它是否解决了问题?
ActiveRecord::Base.connection_pool.verify_active_connections!
答案 4 :(得分:0)
我阅读了https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu上的说明并找到了以下内容。
在我的情况下,解决方案是改变机械师蓝图的加载方式。我的prefork块有这条线:
Spork.prefork do
...
require Rails.root.join 'spec/support/blueprints'
...
我从prefork块中删除了它,而是将此行添加到each_run:
Spork.each_run do
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
...
两条线基本上做同样的事情,所以主要的事情是不要在prefork中加载蓝图,而是在each_run中加载。
希望它有所帮助!