validate_unique_of (). scoped_to (), вызывающий ошибку RecordNotFound - PullRequest
0 голосов
/ 11 июля 2019

Я недавно обновил свое приложение с Rails 3 до Rails 4, и теперь пытаюсь запустить модульные тесты.Но я сталкиваюсь со странной ошибкой в ​​двух местах, где мы используем validate_uniqueness_of().scoped_to().

Это полная ошибка в одном из случаев:

1) Distribution should require case sensitive unique value for collaborator_id scoped to variant_id
   Failure/Error: it { should validate_uniqueness_of(:collaborator_id).scoped_to(:variant_id) }
   ActiveRecord::RecordNotFound:
     Couldn't find Distribution with 'id'=first
   # ./spec/models/distribution_spec.rb:18:in `block (2 levels) in <top (required)>'

Тестовый файл, /spec/models/distribution_spec.rb, содержит:

subject { distribution }

let(:distribution) { create :distribution }

it { should validate_uniqueness_of(:collaborator_id).scoped_to(:variant_id) }

И модель, /app/models/distribution.rb, содержит:

validates_uniqueness_of :collaborator_id, :scope => :variant_id

Я просматривал сообщения о подобных ошибках, но не смог найти ни одного с'id'=first выпуск.

РЕДАКТИРОВАТЬ: полная обратная трассировка

 # ./vendor/ruby/2.1.0/gems/activerecord-4.2.11.1/lib/active_record/relation/finder_methods.rb:324:in `raise_record_not_found_exception!'
 # ./vendor/ruby/2.1.0/gems/activerecord-4.2.11.1/lib/active_record/relation/finder_methods.rb:444:in `find_one'
 # ./vendor/ruby/2.1.0/gems/activerecord-4.2.11.1/lib/active_record/relation/finder_methods.rb:423:in `find_with_ids'
 # ./vendor/ruby/2.1.0/gems/activerecord-4.2.11.1/lib/active_record/relation/finder_methods.rb:71:in `find'
 # ./vendor/ruby/2.1.0/gems/activerecord-4.2.11.1/lib/active_record/querying.rb:3:in `find'
 # ./vendor/ruby/2.1.0/gems/composite_primary_keys-8.1.6/lib/composite_primary_keys/core.rb:25:in `find'
 # ./vendor/ruby/2.1.0/gems/shoulda-matchers-1.2.0/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb:80:in `has_existing?'
 # ./vendor/ruby/2.1.0/gems/shoulda-matchers-1.2.0/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb:71:in `matches?'
 # ./vendor/ruby/2.1.0/gems/rspec-expectations-3.3.1/lib/rspec/matchers/matcher_delegator.rb:14:in `method_missing'
 # ./vendor/ruby/2.1.0/gems/rspec-expectations-3.3.1/lib/rspec/expectations/handler.rb:50:in `block in handle_matcher'
 # ./vendor/ruby/2.1.0/gems/rspec-expectations-3.3.1/lib/rspec/expectations/handler.rb:27:in `with_matcher'
 # ./vendor/ruby/2.1.0/gems/rspec-expectations-3.3.1/lib/rspec/expectations/handler.rb:48:in `handle_matcher'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/memoized_helpers.rb:81:in `should'
 # ./spec/models/distribution_spec.rb:18:in `block (2 levels) in <top (required)>'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:206:in `instance_exec'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:206:in `block in run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:430:in `block in with_around_and_singleton_context_hooks'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:388:in `block in with_around_example_hooks'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:478:in `block in run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:618:in `block in run_around_example_hooks_for'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
 # ./vendor/ruby/2.1.0/gems/rspec-rails-3.3.3/lib/rspec/rails/adapters.rb:127:in `block (2 levels) in <module:MinitestLifecycleAdapter>'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:378:in `instance_exec'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:389:in `execute_with'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:620:in `block (2 levels) in run_around_example_hooks_for'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:273:in `call'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:621:in `run_around_example_hooks_for'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/hooks.rb:478:in `run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:388:in `with_around_example_hooks'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:430:in `with_around_and_singleton_context_hooks'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example.rb:203:in `run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:559:in `block in run_examples'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:555:in `map'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:555:in `run_examples'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/example_group.rb:521:in `run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:115:in `block (3 levels) in run_specs'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:115:in `map'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:115:in `block (2 levels) in run_specs'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1627:in `with_suite_hooks'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:114:in `block in run_specs'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:77:in `report'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:113:in `run_specs'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:89:in `run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
 # ./vendor/ruby/2.1.0/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
 # ./vendor/ruby/2.1.0/bin/rspec:23:in `load'
 # ./vendor/ruby/2.1.0/bin/rspec:23:in `<main>'
...