我想验证是否在我想要使用rspec注入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
这里的App是一个模块化的Sinatra应用程序。我来自.NET背景,我在这里使用构造函数注入来解决这个问题,但我知道这不是红宝石的方法。
一如既往,感谢您的帮助。
答案 0 :(得分: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