Rails 4.0 から 4.1 にアップグレードする前に Spring なしで RSpec/Guard を使用していましたが、すべてのテストは緑色のドットと緑色のテキスト以外の出力なしで合格していました。Spring をアップグレードしてインストールした後、Spring を必要なものと一緒にインストールした後、合格したテストでエラーが発生し、「一意性」エラーが原因でテストが合格しないことがあります。
テストの合格と不合格の間の一般的なエラー:
An error occurred in an after(:all) hook.
NameError: uninitialized constant Recipe
occurred at /home/user/.rvm/gems/ruby-2.1.0@global/gems/activesupport-4.1.0/lib/active_support/inflector/methods.rb:238:in 'const_get'
after(:all) フックは、単純にすべての Manager::Wine オブジェクト (および Manager::Wine オブジェクトの has_many レシピ) を削除します。Manager は Rails エンジンで、Wine モデルと Recipe モデルがあります。Wine クラスのどこにも Recipe 定数が明示的に指定されていません。しかし、前に述べたように、Spring をアップグレードしてインストールするまで、このエラーは通常の RSpec/Guard テストでは表示されませんでした。
他の失敗は、「属性が既に取得されている」ためです。たとえば、標準の「is valid factory」テストは create() で失敗します。これが原因です。しかし、私はRSpecで指定しました:
config.before(:each) do
DatabaseCleaner.start
end
Spring より前のランダム化されたテストでは、これらのエラーは発生しませんでした。
Gemfile スニペット:
group :development, :test do
gem 'spring'
gem 'rspec-rails'
gem 'guard'
gem 'guard-rspec', require: false
gem 'spring-commands-rspec'
gem 'factory_girl_rails'
gem 'database_cleaner'
end
Guardfile には以下が含まれます。
guard :rspec, cmd:"spring rspec" do
Rails app_root/bin には次のファイルが含まれています。
rails
rake
rspec
spring
???