Ruby on rails 使用RSpec测试设定器,您是否应该接收并创建?
我正在开发一个电子商务系统,并熟悉RSpec 订单具有关联的付款。订单完成后,它开始通过我们的支付网关处理付款 下面是规范、适当的方法和故障消息Ruby on rails 使用RSpec测试设定器,您是否应该接收并创建?,ruby-on-rails,ruby,activerecord,rspec,tdd,Ruby On Rails,Ruby,Activerecord,Rspec,Tdd,我正在开发一个电子商务系统,并熟悉RSpec 订单具有关联的付款。订单完成后,它开始通过我们的支付网关处理付款 下面是规范、适当的方法和故障消息 require'spec\u helper' 描述订单,“#处理#付款”做什么 允许(:user){create_user} 允许(:信用卡){新信用卡} 允许(:order){user.orders.create!总数:200} 允许(:payment){stub('payment',已开始处理!:true,)} 在做之前 信用卡存根(销售:真实)
require'spec\u helper'
描述订单,“#处理#付款”做什么
允许(:user){create_user}
允许(:信用卡){新信用卡}
允许(:order){user.orders.create!总数:200}
允许(:payment){stub('payment',已开始处理!:true,)}
在做之前
信用卡存根(销售:真实)
订单存根(信用卡:信用卡)
订单.付款.存根(创建!:付款)
payment.stub(:source==>true,process!:true)
终止
它“创建一个付款”吗
订单。付款。应接收(:创建!)。
附(金额:200,来源:信用卡)及退款
订单处理/付款
终止
它“将付款来源设置为信用卡,并告诉它进行处理!”
付款。应使用(信用卡)接收(:source=)。已订购
付款。您是否应收到(:处理!)订单
订单处理/付款
终止
终止
这是订单类
class Order < ActiveRecord::Base
...
def process_payment
payments.create!(amount: total, source: credit_card).tap do |payment|
payment.process!
end
end
...
end
类顺序
第二个规范失败,声称:source=从未收到。对于ordered,它只是说这个过程!被称为故障。如果没有ordered,它表示它期望:source=一次,但从未收到它。我理解为什么ordered应该在那里,但我只是想澄清一下,它声称:source=从未收到过
是创造!不调用源=?什么是适当的测试方法,以确保正确设置付款的来源?我想说,您的
it“创建付款”
规范就足够了。对create!的行为负责代码>应该在专门为其编写的规范中
如果你真的想确保create
正在做它应该做的事情,也许可以尝试让处理付款
保存到数据库,然后调用付款。last
获取新记录并检查其属性。但我认为那太过分了
这样想,当您编写控制器规范时,您不会再次测试模型的所有行为;您只需测试控制器如何与它们交互。这是一个类似的情况。很公平。把付款折叠起来。你应该把(:process!)也放进那部分代码吗?是的,对不起。我昨晚应该抓到的。