Ruby on rails RSPEC-预期与收到的错误

Ruby on rails RSPEC-预期与收到的错误,ruby-on-rails,testing,rspec,Ruby On Rails,Testing,Rspec,这是我的测试: describe Item do subject {Item.new(:report_id => 26 , :name => 'Gas' , :tax_rate => 0.13, :tax_id => 1 , :category_id => 15 , :sub_category_id => 31 , :job_id => 1 , :total => 20 )} let(:tax) {Tax.where(id: s

这是我的测试:

describe Item do
  subject {Item.new(:report_id => 26 ,  :name => 'Gas' ,  :tax_rate => 0.13, :tax_id => 1 ,  :category_id => 15 ,  :sub_category_id => 31 ,  :job_id => 1 , :total => 20 )}

  let(:tax) {Tax.where(id: subject.tax_id).first}
  let(:sub_category) {SubCategory.where(id: subject.sub_category_id).first}


  it 'Calculate with just Total' do

    subject.name.should be == 'Gas'
    tax = Tax.find_by_id(subject.tax_id)
    subject.sub_category_id.should be == 31
    subject.set_nil_values
    sub_category.should_receive(:taxable).and_return(1)
    tax.should_receive(:rate).and_return(0.13)
    sub_category.should_receive(:tax_adjustment).and_return(nil)
    subject.should_receive(:tax_rate).and_return(0.13)
    subject.calculate_tax(tax, sub_category)
    subject.tax_amount = (((subject.total - subject.deduction) - ((subject.total - subject.deduction) / (1 + 0.13))) * 1)
    subject.calculate_cost
    subject.cost.should be_within(0.01).of(17.70)

  end
这是我的错误:

  1) Item Calculate with just Total
     Failure/Error: subject.should_receive(:tax_rate).and_return(0.13)
       (#<Item:0x007faab7299c30>).tax_rate(any args)
           expected: 1 time with any arguments
           received: 3 times with any arguments
     # ./spec/models/item_spec.rb:25:in `block (2 levels) in <top (required)>'
但是现在得到以下错误:

  1) Item Calculate with just Total
     Failure/Error: expect_any_instance_of(subject).to receive(:tax_rate)
     NoMethodError:
       undefined method `method_defined?' for #<Item:0x007fe6fdaa1bf8>
     # ./spec/models/item_spec.rb:25:in `block (2 levels) in <top (required)>'
1)仅用总计计算项目
失败/错误:期望(主题)的任何实例接收(:税率)
命名错误:
未定义的方法'method_defined'#
#./spec/models/item_spec.rb:25:in‘分块(2层)’in’

发生初始错误是因为,正如错误消息所述,所讨论的方法被调用了三次而不是一次,这是隐含的期望。假设实际行为是它应该是的,您可以将预期更改为:

...receive(...).exactly(3).times
有关更多信息,请参阅

至于您遇到的第二个错误,根据我的测试,当您对一个已经有实例存根的类使用
expect\u any\u instance\u of
时,就会发生这种情况,然后调用该存根实例。无论如何,即使这样做有效,我也不相信这是您想要的,因为
expect\u any\u instance\u of
在频率方面的语义与
expect
相同,即“在存根实例上进行一次(总计)调用”


如果第二个错误发生时您没有删除对
主题的现有期望值,请告诉我。

您最初的错误发生是因为,正如错误消息所述,所讨论的方法调用了三次而不是一次,这是隐式期望值。假设实际行为是它应该是的,您可以将预期更改为:

...receive(...).exactly(3).times
有关更多信息,请参阅

至于您遇到的第二个错误,根据我的测试,当您对一个已经有实例存根的类使用
expect\u any\u instance\u of
时,就会发生这种情况,然后调用该存根实例。无论如何,即使这样做有效,我也不相信这是您想要的,因为
expect\u any\u instance\u of
在频率方面的语义与
expect
相同,即“在存根实例上进行一次(总计)调用”


如果第二个错误发生时您没有删除对
主题的现有期望值,请告诉我。

嘿-我如何传递结果,它应该返回该行?只需添加
。然后返回(…)
。嘿-我如何传递结果,它应该返回该行?只需添加
。然后返回(…)
就像您以前做的那样。