使用规范测试Sinatra app中对双打的期望

时间:2013-04-23 13:01:33

标签: ruby rspec sinatra

我想验证是否在我想要使用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背景,我在这里使用构造函数注入来解决这个问题,但我知道这不是红宝石的方法。

一如既往,感谢您的帮助。

1 个答案:

答案 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