Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用RSpec测试设定器,您是否应该接收并创建?_Ruby On Rails_Ruby_Activerecord_Rspec_Tdd - Fatal编程技术网

Ruby on rails 使用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,)} 在做之前 信用卡存根(销售:真实)

我正在开发一个电子商务系统,并熟悉RSpec

订单具有关联的付款。订单完成后,它开始通过我们的支付网关处理付款

下面是规范、适当的方法和故障消息

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!)也放进那部分代码吗?是的,对不起。我昨晚应该抓到的。