【发布时间】:2015-05-13 22:21:12
【问题描述】:
这让我发疯了。我在不丢失上下文的情况下将其精简到最低限度(我认为!)
我要做的就是检查当我更新一个值并将其保存到数据库时,该值是否已保存。我想这样做是因为我需要编写一些其他代码来有条件地在 before_save 回调中防止这种情况发生,并且我无法测试它,直到我确定它工作正常!
工厂和规格如下,我敢肯定它真的很愚蠢,但我就是想不通......
FactoryGirl.define do
factory :programme do
name 'Trainee Programme'
end
factory :membership do
programme
end
factory :specialty do
sequence(:name) { |n| "Specialty #{n}" }
end
factory :user do
sequence(:email) { |n| "factorygirl-user-#{n}@remailer.org" }
password 'password'
password_confirmation 'password'
factory :trainee, class: User do
sequence(:email) { |n| "factorygirl-trainee-#{n}@remailer.org" }
name 'Factory Girl Trainee'
after(:create) do |user|
FactoryGirl.create(:membership, user: user, start_date: 1.day.ago)
end
end
end
end
describe Membership do
let(:trainee) { FactoryGirl.create(:trainee) }
it 'sets specialty' do
puts trainee.current_membership.inspect
trainee.current_membership.specialty = specialty
puts trainee.current_membership.inspect
trainee.current_membership.save!
puts trainee.current_membership.inspect
expect(trainee.current_membership.specialty).to eq(specialty)
end
end
规范失败,因为 expect 看到一个 nil 值。当我运行代码时,我得到的调试输出是:
#<Membership id: 11, user_id: 11, programme_id: 11, start_date: "2015-03-10", end_date: nil, created_at: "2015-03-11 22:02:51", updated_at: "2015-03-11 22:02:51", options: {}, specialty_id: nil, membership_type_id: nil>
#<Membership id: 11, user_id: 11, programme_id: 11, start_date: "2015-03-10", end_date: nil, created_at: "2015-03-11 22:02:51", updated_at: "2015-03-11 22:02:51", options: {}, specialty_id: nil, membership_type_id: nil>
#<Membership id: 11, user_id: 11, programme_id: 11, start_date: "2015-03-10", end_date: nil, created_at: "2015-03-11 22:02:51", updated_at: "2015-03-11 22:02:51", options: {}, specialty_id: nil, membership_type_id: nil>
所以好像专业的分配从来没有发生过??
【问题讨论】:
-
speciality定义在哪里?
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord rspec