2013-01-09 59 views
1

我在Ruby應用程序中使用ZMQ :: Poller,並且想要編寫一些rspec測試。由於輪詢提供了一個register - 方法註冊一個插座,它可以在以後使用readables訪問,我需要在我的嘲笑對象保存註冊插座莫名其妙。RSpec模擬對象和(狀態)變量

我覺得這個模式會像如下:

@int_var = 'a' 
    tst_mock = mock('Test') 
    tst_mock.stub(:save_method) do |arg| 
    @int_var = arg 
    end 
    tst_mock.stub(:return_method).and_return(@int_var) 

    puts "##########" 
    puts tst_mock.return_method 
    tst_mock.save_method('b') 
    puts tst_mock.return_method 
    puts "##########" 

是否有機會達到「B」被存儲在@int_arg?和訪問它後來以獲得所需的輸出:

########## 
a 
b 
########## 

回答

2

你的:return_method回報每一次,因爲這是傳遞給它當存根被註冊的價值a存根。

你希望它是動態的,所以傳遞一個塊到你的存根,返回正確的值。

@int_var = 'a' 
tst_mock = mock('Test') 
tst_mock.stub(:save_method) do |arg| 
    @int_var = arg 
end 

# Passing a block, defer calculating of response until needed 
tst_mock.stub(:return_method) do 
    @int_var 
end 

puts "##########" 
puts tst_mock.return_method 
tst_mock.save_method('b') 
puts tst_mock.return_method 
puts "##########" 

將輸出:

########## 
a 
b 
##########