gpt4 book ai didi

ruby-on-rails - 在 rspec 中更改关联对象的正确方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:01 26 4
gpt4 key购买 nike

我最近开始用rspec测试,所以我很可能会误会,如果有更好的方法请指正

我创建了两个相关模型

let(:user) {FactoryGirl.create :user} 
let!(:participation) {FactoryGirl.create :participation, user: user}

并且在其中一项测试更改相关对象之一之前

context "when" do
before {participation.prize = 100}
it "" do
binding.pry
end
end

但在里面

participation.prize => 100
user.participatons.select(:prize) => nil

我做错了什么?以及如何解决?

最佳答案

当您说 user.participations.select(:prize) 时,您正在查询数据库以获取用户参与的奖品列中的值。但是,当您在 {participation.prize = 100} 之前说时,您只是在参与对象上设置奖品属性。尝试在选择行之前保存参与:



participation.prize # => 100
participation.save
user.participatons.select(:prize) # => nil

另一个可能的问题是 user.participations 已经被之前的调用记住了。确保 user.participations.first == participation。如果没有,检查

1) put participation.user_id

2) puts user.participations, user.reload.participations


最后,一种更好的设置测试的方法可以减少遇到此问题的频率:

# let(:price) { 0 } # default price. Optional so that tests won't throw errors if you forget to set it in a context/describe block.
let(:user) {FactoryGirl.create :user}
let!(:participation) {FactoryGirl.create :participation, user: user, price: price}

# ...

context "when ..." do
let(:price) { 100 }
it "" do
binding.pry
end
end

这样,价格就在您创建模型时设置。遵循这种模式通常意味着更少遇到这个问题。

关于ruby-on-rails - 在 rspec 中更改关联对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42612638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com