【发布时间】:2015-03-09 17:29:35
【问题描述】:
如果模型具有关联,如何设置仅在更新时检查验证的测试?以下是 2 个类和测试。
user.rb
class User < ActiveRecord::Base
has_one :survey
validates :first_name, presence: true, on: :update, if: :survey_completed?
private
def survey_completed?
survey.present?
end
end
survey.rb
class Survey < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
user_spec.rb
describe "if survey is completed" do
let(:user) {User.create(email: 'test@test.com')}
let(:survey) {Survey.create(user_id: user.id)}
it "returns error if phone number has not been completed" do
user.first_name = 'test'
expect(user.reload.valid?).to be false
end
end
上述测试失败,返回true。查看控制台后,我可以看到测试失败,因为没有针对我的用户的调查,因此没有运行验证。
我尝试了save! 的变体,使用重新加载,而不是重新加载,测试总是返回真。如何设置测试以便有与用户相关的调查?
为简单起见,我只展示了相关代码。
【问题讨论】:
标签: ruby-on-rails validation ruby-on-rails-4.1 updatemodel