Тестирование ассоциаций с rspec-rails 3.0.1 и shoulda не работает
В настоящее время, с помощью RSpec-rails (2.14.2), я тестирую свои ассоциации в спецификации модели с shoulda (3.5.0) gem следующим образом:
# app/models/user.rb
class User < ActiveRecord::Base
belongs_to :school
end
# spec/models/user_spec.rb
describe User do
it { should belong_to :school }
end
После некоторых исследований я уперся в стену, пытаясь заставить ассоциативные утверждения работать (все они, похоже, терпят неудачу).
Сообщение об ошибке:
1) User
Failure/Error: it { is_expected.to belong_to :school }
NoMethodError:
undefined method `belong_to' for #<RSpec::ExampleGroups::School:0x007f8a4c7a68d0>
# ./spec/models/user.rb:4:in `block (2 levels) in <top (required)>'
Итак, мои вопросы таковы:
- вы можете проверить объединений Без бы камень? Это кажется невозможным, основываясь на том, что я видел с синтаксисом "expect".
- должен ли драгоценный камень порвать с rspec 3.0.1 для всех? Есть ли обходной путь?
3 ответа:
Shoulda-matchers-это драгоценный камень, который обеспечивает ассоциацию, проверку и другие сопоставления.
Драгоценный камень shoulda (который мы также делаем) предназначен для использования shoulda-matchers с Test::Unit (а также предоставляет некоторые приятные вещи, такие как контексты и возможность использовать строки в качестве имен тестов). Но если вы на Вас, Вы будете хотеть использовать надо-вычислителей, не стоило.
Вот как это работает, теперь с драгоценным камнем shoulda-matchers и синтаксисом "expect"
describe User, type: :model do it { is_expected.to belong_to :school } end
Я не думаю, что вам нужен драгоценный камень для основных ассоциаций.
У вас могут возникнуть проблемы, если вы на самом деле не назначили своего пользователя в свою школу. Вам нужно заполнить внешний ключ, а не просто использовать связь, не сделав этого.
Так что вам, возможно, придется сделать
@school = School.new @user = User.new @school.users << @user it { should belong_to :school } # within the user block
Или
expect(@user).to belong_to @school