2013-04-23 42 views
0

我想驗證一個方法是否在我想要使用rspec注入到Sinatra應用程序中的服務上調用,但我找不到如何完成此操作的示例。這裏是我的規格...使用規範測試Sinatra應用程序中的雙擊期望

RSpec.configure do |config| 
    config.include Rack::Test::Methods 
end 

def app 
    App 
end 

describe 'Login' do 
    context 'when the user is logged out' do 
    describe 'POST on /signup' do 
     it 'invokes signup on the user service with the correct parameters' do 
     service = double('user_service').as_null_object 
     service.should_receive(:signup).with(:username => 'RobA2345') 
     post '/signup' 
     end 
    end 
    end 
end 

這裏的應用程序是一個模塊化的Sinatra應用程序。我來自.NET的背景,我會在這裏使用構造器注入來解決這個問題,但我知道這不是做這件事的紅寶石方式。

一如既往的幫助表示讚賞。

回答

1

假設您希望在UserService的新實例上收到消息,有幾種方法可以執行此操作。如果您使用的是最新的RSpec的版本,這應該工作:

it 'invokes signup on the user service with the correct parameters' do 
    UserService.any_instance.should_receive(:signup).with(:username => 'RobA2345') 
    post '/signup' 
end 

或者,這應該工作在短短約rspec的任何版本:

it 'invokes signup on the user service with the correct parameters' do 
    service = double('user_service').as_null_object 
    UserService.stub(:new).and_return(service) 
    service.should_receive(:signup).with(:username => 'RobA2345') 
    post '/signup' 
end 
+0

是的,這確實工作。儘管我無法理解它,但它只是感覺不對,但是從我10年來堅持靜態類型的世界中,毫無疑問,一切都是明確的。 再次感謝,我確信我會得到它的一天:) – RobA2345 2013-04-23 13:35:53

相關問題