Похоже, я должен был найти очевидный ответ на эту проблему после нескольких часов поиска в Google и тестирования.
Я хочу иметь возможность установить caredate.user_id => provider.user_id в пределах фабрики caredate.
Ошибка теста:
ActiveRecord :: RecordInvalid:
Проверка не удалась: пользователь должен быть таким же
как пользователь провайдера
У меня есть проверка ActiveRecord, которая работает при тестировании через браузер:
class Caredate < ActiveRecord::Base //works fine when testing via browser
belongs_to :user
belongs_to :provider
validates_presence_of :user_id
validates_presence_of :provider_id
validate :user_must_be_same_as_provider_user
def user_must_be_same_as_provider_user
errors.add(:user_id, "must be same as provider user") unless self.user_id == self.provider.user_id
end
end
//factories.rb
Factory.define :user do |f|
f.password "test1234"
f.sequence(:email) { |n| "foo#{n}@example.com" }
end
Factory.define :caredate do |f|
f.association :provider
**f.user_id { Provider.find_by_id(provider_id).user_id } //FAILS HERE**
end
Factory.define :provider do |f|
f.association :user
end
Приношу свои извинения, если на этот вопрос уже был дан ответ; Я попробовал несколько разных вариантов и не смог заставить его работать.
Обновление: это проходит проверку, поэтому я все ближе. Я мог бы взломать случайное число.
Factory.define :caredate do |f|
f.association :user, :id => 779
f.association :provider, :user_id => 779
end