4

我正在使用 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....

任何提示表示赞赏!

4

5 回答 5

8

您可能还启用了设计。

您的问题在这里描述:https ://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujutsu 更具体地说,这里是rails 3.1:https ://gist.github.com/1054078

您的 prefork 块的开头spec_helper.rb 应该 env.rb如下所示:

Spork.prefork do
  Spork.trap_method(Rails::Application, :reload_routes!)
  Spork.trap_method(Rails::Application::RoutesReloader, :reload!)
...

祝你好运!

于 2011-08-01T19:22:32.793 回答
3

如果您使用的是 Factory Girl,请不要使用“factory_girl_rails”gem,只需使用“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 连接的问题。

于 2011-08-10T16:17:34.773 回答
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
于 2011-07-17T17:20:47.707 回答
0

您能否尝试将其添加到Spork.each_run回调并检查它是否解决了问题?

ActiveRecord::Base.connection_pool.verify_active_connections!
于 2011-07-20T11:39:49.757 回答
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 中加载。

希望能帮助到你!

于 2011-08-09T08:30:56.050 回答