使用摩卡(mocha),有没有一种方法可以对许多参数进行存根处理? [英] using mocha, is there a way to stub with many parameters?

查看:91
本文介绍了使用摩卡(mocha),有没有一种方法可以对许多参数进行存根处理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我们假设我有这个课程

Let's assume that i have this class

class Foo
  def bar(param1=nil, param2=nil, param3=nil)
     :bar1 if param1
     :bar2 if param2
     :bar3 if param3
  end
end

我可以使用以下方法加整条方法:

I can stub whole bar method using:

Foo.any_instance.expects(:bar).at_least_once.returns(false)

但是,如果我只想在bar方法的param1为true时存根,则找不到方法:

However if I only want to stub when param1 of bar method is true, I couldn't find a way to do:

我也查看了with和has_entry,看来它仅适用于单个参数.

I also looked at with, and has_entry, and it seems it only applies to a single parameter.

我期待着这样的功能.

Foo.any_instance.expects(:bar).with('true',:any,:any).returns(:baz1)
Foo.any_instance.expects(:bar).with(any,'some',:any).returns(:baz2)

谢谢

............................................... ....编辑以下内容..................................................... ..

................................................... EDITED THE FOLLOWING .............................................

谢谢,纳什

不熟悉rspec,所以我尝试使用any_instance进行单元测试,并且看起来可行

Not familiar with rspec, so I tried with unit test with any_instance, and it seems work

require 'test/unit'
require 'mocha'

class FooTest < Test::Unit::TestCase 

  def test_bar_stub 
    foo = Foo.new
    p foo.bar(1)

    Foo.any_instance.stubs(:bar).with { |*args| args[0]=='hee' }.returns('hee')
    Foo.any_instance.stubs(:bar).with { |*args| args[1]=='haa' }.returns('haa')
    Foo.any_instance.stubs(:bar).with { |*args| args[2]!=nil   }.returns('heehaa')

    foo = Foo.new
    p foo.bar('hee')
    p foo.bar('sth', 'haa')
    p foo.bar('sth', 'haa', 'sth')
  end

end

推荐答案

如果我答对了,它可能类似于:

If I got you right it can be something like:

class Foo
  def bar(param1=nil, param2=nil, param3=nil)
     :bar1 if param1
     :bar2 if param2
     :bar3 if param3
  end
end

describe Foo do
  it "returns 0 for all gutter game" do
    foo = Foo.new
    foo.stub(:bar).with { |*args| args[0] }.and_return(:bar1)
    foo.stub(:bar).with { |*args| args[1] }.and_return(:bar2)
    foo.stub(:bar).with { |*args| args[2] }.and_return(:bar3)
    foo.bar(true).should == :bar1
    foo.bar('blah', true).should == :bar2
    foo.bar('blah', 'blah', true).should == :bar3
  end
end

这篇关于使用摩卡(mocha),有没有一种方法可以对许多参数进行存根处理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆