4

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

# 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

我也开始使用 RSpec。我应该如何配置 RSpec 来测试这个功能?

4

3 回答 3

5

上面的参考资料都提供了丰富的信息和有用的信息,但大多是特定于 Rails 的。我发现很难找到一个简单的方法来对模块化 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

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

于 2012-12-20T06:33:46.617 回答
0

它实际上非常简单——只需将 rspec 添加到您的 gemfile(然后捆绑安装),并在您的 gem 中创建一个名为 spec/ 的目录。完成后,添加一个文件 spec/spec_helper.rb,其中包含 rspec 的一些配置(主要需要库中的各种文件)以及为您的规范定义一些辅助方法。然后,对于每个模型和控制器,创建一个名为 my_model_name_spec.rb 或 my_controller_name_spec.rb 的文件,并在那里进行测试。

以下是开始使用 rspec 的一些有用资源:

Railscasts:

http://railscasts.com/episodes/275-how-i-test

http://railscasts.com/episodes/71-testing-controllers-with-rspec

http://railscasts.com/episodes/157-rspec-matchers-macros/

对于一些更高级(但解释清楚)的东西:

http://benscheirman.com/2011/05/dry-up-your-rspec-files-with-subject-let-blocks

于 2012-06-27T06:34:13.593 回答
0

确保包含机架测试gem。

你的规范助手应该有:

require 'rack/test'
require 'foo' # or where ever your app is

# This can go in a helper somewhere
module AppHelper
  def app
    Foo.new
  end
end

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

然后,您的规格可以如下所示:

require 'spec_helper'

# Example app. Delete this example.
class Foo < Sinatra::Base
   get '/' do
    'Jesse Pinkman'
  end
end

describe Foo do
  it 'is testable' do
    get '/' do
      expect(last_response).to be_ok
    end
  end
end
于 2014-04-08T00:13:27.627 回答