我需要写一个期望,即在支付系统中创建一个新对象.代码包括order.rb和order_spec.rb(Order类在这里):
#order.rb
def confirm_order(method_of_payment)
if credit_card_but_products_out_stock?(method_of_payment)
raise "Cannot make credit card payment now, as some products are out of stock"
end
order_total
Payment.new(method_of_payment, self.total)
end
#order_spec.rb
it 'it creates a new payment object if method_of_payment is valid and order.total is > 0' do
order.add_product(product, 3)
order.confirm_order(:credit_card)
#Expect that a new payment object is created.
end
Run Code Online (Sandbox Code Playgroud)
我想了解如何编写适当的规范来测试是否创建了新的Payment对象.我发现Semaphore CI的这篇文章很有用,但我不确定解决方案.我很确定我应该创建某种类型的测试双,然后可能是方法存根allow(order).to receive(:confirm_order).and_return(#new_object??).
man*_*bot 14
如果你是单元测试Order课程,那么你不应该嘲笑或抄袭Order课程.您可以在Payment类上设置一个期望值来返回一个模拟,然后您可以进一步断言为confirm_order方法的返回值.
let(:payment) { double :payment }
it "returns a payment" do
expect(Payment).to receive(:new).with(:credit_card).and_return(payment)
order.add_product(product, 3)
expect(order.confirm_order(:credit_card)).to eq(payment)
end
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以模拟Order类的依赖关系,而无需更改Order类,这样更安全,因为Order模拟方法可以轻松创建误报测试结果.
| 归档时间: |
|
| 查看次数: |
5934 次 |
| 最近记录: |