Pla*_*Ton 31 rspec ruby-on-rails stub
只是想知道是否/如何在rspec存根链中传递参数.举个例子,假设我有以下行动:
def index
@payments = Payment.order(:updated_at).where(:paid => true)
@bad_payments = Payment.order(:some_other_field).where(:paid => false)
end
Run Code Online (Sandbox Code Playgroud)
在我的控制器规范中,我希望能够存根两种方法并返回不同的结果.如果只有@payments场地在行动中,我会使用类似的东西
Payment.stub_chain(:order, :where) { return_this }
Run Code Online (Sandbox Code Playgroud)
但是,当然,这将返回相同的值@bad_payments.
那么 - 简而言之,我如何包含:updated_at和:paid => true作为存根条件?
小智 23
你可以用这个:
Payment.stub_chain(:order, :where).with(:updated_at).with(:paid => true) { return_this }
Run Code Online (Sandbox Code Playgroud)
cze*_*asz 17
随着rspec > 3使用的语法如下:
expect(Converter).to receive_message_chain("new.update_value").with('test').with(no_args)
Run Code Online (Sandbox Code Playgroud)
而不是stub_chain.
Ian*_*ang 16
您可以使用嵌套的存根块.该块可以接受参数,返回值用作函数返回值.
我使用tap因为stub不返回被调用者.创建的模拟double作为方法的结果返回order,该where方法再次为存根.
Payment.stub(:order) { |order|
double('ordered_payments').tap { |proxy|
proxy.stub(:where) { |where|
[order, where]
}
}
}
Payment.order(:updated_at).where(:paid => true)
# => returns [:updated_at, {:paid => true}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12707 次 |
| 最近记录: |