Rspec:在let和return值中执行代码

时间:2017-06-05 17:07:52

标签: ruby rspec

我有一个以下代码,用于在执行测试之前为变量赋值:

 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的引用将是零。请告诉我怎么做。

2 个答案:

答案 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建议的内容。那个也好。