Giả sử rằng tôi có lớp nàysử dụng mocha, có cách nào để khai thác với nhiều thông số không?
class Foo
def bar(param1=nil, param2=nil, param3=nil)
:bar1 if param1
:bar2 if param2
:bar3 if param3
end
end
tôi có thể còn sơ khai phương pháp toàn thanh bằng:
Foo.any_instance.expects(:bar).at_least_once.returns(false)
Tuy nhiên nếu tôi chỉ muốn còn sơ khai khi param1 của phương pháp thanh là sự thật, tôi không thể tìm cách để làm:
Tôi cũng đã xem xét, và has_entry, và có vẻ như nó chỉ áp dụng cho một tham số duy nhất.
Tôi đã mong đợi một số chức năng như thế này.
Foo.any_instance.expects(:bar).with('true',:any,:any).returns(:baz1)
Foo.any_instance.expects(:bar).with(any,'some',:any).returns(:baz2)
Cảm ơn
...................................... ............. CHỈNH SỬA THEO D FI .................................. ...........
Cảm ơn, nash
Không quen thuộc với rspec, vì vậy tôi đã thử với bài kiểm tra đơn vị với any_instance, và có vẻ như làm việc
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
hy vọng thay vì cuống cũng hoạt động tốt cho tôi. Foo.any_instance.expects (: bar) .với {| * args | args [0] == 'hee'} .returns ('hee') – allenhwkim