4

Ruby 1.9.2、Rails 3.1、Rspec、Postgres、および Spork を使用していますが、うまく連携させることができません。

初めてスペックを実行すると (Spork がバックグラウンドで実行されます)、正常に動作します。ただし、spec を 2 回目に実行すると、次のように失敗します。

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

Deviseも有効になっている可能性があります。

あなたの問題はここに記述されています:https ://github.com/sporkrb/spork/wiki/Spork.trap_method-柔術 そしてより具体的にはここにレール3.1について:https ://gist.github.com/1054078

プリフォークブロックの始まりは次のように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」ジェムを使用せず、「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を使用している場合は、 https://github.com/timcharper/spork/wiki/Spork.trap_method-JujutsuでSporkのtrap_methodについて必ずお読みください。

これにより、テスト中にSporkと切断されたPostgreSQL接続に関する問題が解決しました。

于 2011-08-10T16:17:34.773 に答える
0

これを callback に追加してみてSpork.each_run、問題が解決するかどうかを確認していただけますか?

ActiveRecord::Base.connection_pool.verify_active_connections!
于 2011-07-20T11:39:49.757 に答える
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

https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsuの説明を読んだところ、次のことがわかりました。

私の場合、解決策は機械工の設計図のロード方法を変更することでした。私のプリフォークブロックには次の行がありました:

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}
  ...

2 つの行は基本的に同じことを行うため、主な目的は、ブループリントをプレフォークではなく、each_run にロードすることです。

それが役に立てば幸い!

于 2011-08-09T08:30:56.050 に答える