我需要写一个期望,即在支付系统中创建一个新对象. order.rb和order_spec.rb包含的代码(订单类为
here):
#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
我想了解如何编写适当的规范来测试是否创建了新的Payment对象.我发现Semaphore CI的this article很有用,但我不确定解决方案.我很确定我应该创建某种类型的测试双,然后可能是方法存根允许(order).to receive(:confirm_order).and_return(#new_object ??).
解决方法
如果您正在对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
这样,您可以模拟Order类的依赖关系,而无需更改Order类,这样更安全,因为Order上的模拟方法可以轻松创建误报测试结果.
原文地址:https://www.jb51.cc/ruby/270743.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。