【问题标题】:How to use RSpec to test a Sinatra application within a gem?如何使用 RSpec 在 gem 中测试 Sinatra 应用程序?
【发布时间】:2012-06-28 09:11:18
【问题描述】:

我正在编写一个 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

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

【问题讨论】:

    标签: ruby rspec rubygems sinatra


    【解决方案1】:

    一定要包含rack-test 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
    

    【讨论】:

      【解决方案2】:

      上面的参考资料都是有用的,但大多是特定于 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
      

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

      【讨论】:

      • 谢谢!。这也适用于在 rails 应用程序中安装的 Sinatra 应用程序:)
      【解决方案3】:

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

      这里有一些关于 rspec 入门的有用资源:

      铁路广播:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-20
        • 2015-09-05
        • 2011-11-17
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多