我有一个以下代码,用于在执行测试之前为变量赋值:
let!(:cash_payment){
cash_payment = PaymentMethod.find_by_id(1)
create(:payment_method, :cash) unless cash_payment
return cash_payment
}
问题是:在运行该代码块之后,ruby不会将cash_payment
对象的值返回到cash_payment。所以在那之后,在我的测试中,对cash_payment
的引用将是零。请告诉我怎么做。
答案 0 :(得分:2)
找到ID为PaymentMethod
的{{1}}或创建一个新的:{/ p>
1
答案 1 :(得分:1)
问题是:运行该代码块后,ruby不会将cash_payment对象的值返回到cash_payment。
不正确。
所以在那之后,在我的测试中,对cash_payment的引用将是nil
仅当您在数据库中没有任何付款方式时才会发生这种情况(PaymentMethod.find_by_id(1)
返回nil)。
如果发生这种情况,您想要从工厂女孩创建付款方式,但您无法将其分配给任何东西。该值被忽略。
create(:payment_method, :cash) unless cash_payment
应该更像
cash_payment ||= create(:payment_method, :cash)
然后就行了。或者,使用@gabrielhilal建议的内容。那个也好。