RSpec Stubbing:返回参数

时间:2011-05-09 14:09:27

标签: ruby parameters rspec return-value stubbing

虽然我的问题很简单,但我没有在这里找到答案:

如何存根方法并返回参数本身(例如,在执行数组操作的方法上)?

这样的事情:

 interface.stub!(:get_trace).with(<whatever_here>).and_return(<whatever_here>)

3 个答案:

答案 0 :(得分:29)

注意:不推荐使用存根方法。有关现代化的方法,请参阅this answer


stub!可以接受一个阻止。该块接收参数;块的返回值是存根的返回值:

class Interface
end

describe Interface do
  it "should have a stub that returns its argument" do
    interface = Interface.new
    interface.stub!(:get_trace) do |arg|
      arg
    end
    interface.get_trace(123).should eql 123
  end
end

答案 1 :(得分:18)

已弃用存根方法,有利于期望。

expect(object).to receive(:get_trace).with(anything) do |value| 
  value
end

https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/configuring-responses/block-implementation

答案 2 :(得分:2)

您可以使用def product_id_change_with_wh(self, cr, uid, ids, pricelist, product, qty=0, uom=False, qty_uos=0, uos=False, name='', partner_id=False, lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False, warehouse_id=False, context=None,order_id=False): context = context or {} product_uom_obj = self.pool.get('product.uom') product_obj = self.pool.get('product.product') warning = {} #UoM False due to hack which makes sure uom changes price, ... in product_id_change res = self.product_id_change(cr, uid, ids, pricelist, product, qty=qty, uom=False, qty_uos=qty_uos, uos=uos, name=name, partner_id=partner_id, lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context,order_id=order_id) (存根)代替allow(模拟):

expect

使用命名参数:

allow(object).to receive(:my_method_name) { |param1, param2| param1 }

这是一个现实生活中的例子:

假设我们有allow(object).to receive(:my_method_name) { |params| params[:my_named_param] } 使用S3StorageService方法将我们的文件上传到S3。该方法将S3直接URL返回到我们上传的文件。

upload_file

我们希望存储该上传的原因有很多(离线测试,性能改进......):

def self.upload_file(file_type:, pathname:, metadata: {}) …

该存根只返回文件路径。