gpt4 book ai didi

ruby-on-rails - after_create 回调在测试中不起作用,但在控制台中起作用

转载 作者:行者123 更新时间:2023-12-04 06:33:55 26 4
gpt4 key购买 nike

在 Rails 中进行测试一直是一个谜,如果可能的话我会避免,但我正在将一个人们愿意付费的生产应用程序放在一起,所以我真的需要测试。这个问题让我很生气,因为测试失败了,但是当我在控制台中(在测试和开发模式下)执行相同的命令时,它工作正常。

用户测试.rb

test "should update holidays booked after create"
user = users(:robin)
assert_equal user.holidays_booked_this_year, 4 # this passes
absence = user.absences.create(:from => "2011-12-02", :to => "2011-12-03", :category_id => 1, :employee_notes => "Secret") # this works
assert_equal user.holidays_booked_this_year, 5 # fails
end

缺席.rb
after_create :update_holidays_booked

def update_holidays_booked
user = self.user
user.holidays_booked_this_year += self.days_used # the days used attribute is calculated using a before_create callback on the absence
user.save
end

我唯一的想法是这与通过 Absence 模型上的回调更新 User 模型有关,但正如我所说,这在控制台中有效。

任何意见,将不胜感激。

谢谢

罗宾

最佳答案

你们工厂用的是什么?

如果您正在使用数据库支持的测试,那么您需要在测试中重新加载用户(因为用户实例未更新,缺席的用户已更新并保存到数据库中),重新加载用户将如下所示:

assert_equal user.reload.holidays_booked_this_year, 5

我也猜想缺席需要有一个用户,所以你应该使用 build 而不是 create 所以用户的外键是“created”实例的一部分:
user.absences.build

第一个猜测是,在控制台中,您正在对数据库中的真实用户进行操作,而测试是一个装置。你试过这是在测试中吗?:
raise user.inspect

查看输出并确定您实际使用的是哪个用户以及holiday_booked_this_year 属性是什么。

(你的测试块在描述后也需要一个“做”)

关于ruby-on-rails - after_create 回调在测试中不起作用,但在控制台中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309430/

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