如何使用RSpec测试gem中的Sinatra应用程序?

And*_*rew 4 ruby rubygems rspec sinatra

我正在编写一个gem,其中包含一个开发人员可以扩展的Sinatra应用程序.例如:

# gem code:
require 'sinatra'
module Mygem
  class Application < Sinatra::Base
    get 'auth/login' {}
    get 'auth/logout {}
  end
end

# developer code:
require 'mygem'
class DeveloperApp < Mygem::Application
  # ..
end
Run Code Online (Sandbox Code Playgroud)

我也开始使用RSpec了.我应该如何配置RSpec来测试此功能?

Dav*_*yer 5

上面的参考资料都是信息性和有用的,但主要是特定于轨道.我发现很难找到一个简单的配方来进行模块化Sinatra应用程序的基本测试,所以我希望这会为其他人回答这个问题.这是一个完全无骨,尽可能小的测试.这可能不是唯一的方法,但它适用于模块化应用程序:

require 'sinatra'
class Foo < Sinatra::Base
   get '/' do
    "Hello"
  end
end

require 'rack/test'

describe Foo do

  include Rack::Test::Methods

  def app
    Foo.new
  end

  it "should be testable" do
    get '/'
    last_response.should be_ok
  end

end
Run Code Online (Sandbox Code Playgroud)

请注意,启动测试时不需要运行服务器(我看到的一些教程暗示你这样做) - 它不是集成测试.