8

Railsアプリケーションでより適切に使用できるようにtsungの機能をラップするライブラリを作成しています。私は以下に要約するいくつかの統合テストを書きたいと思います:

  1. シンプルなWebサーバーを起動する
  2. ライブラリを介してtsung-recorderを実行します
  3. tsungプロキシを使用するように設定されたFirefoxプロファイルを使用してSeleniumを起動し、手順1で起動したサーバーからページをフェッチします。
  4. 記録されたライブラリを調べます(存在する、正しい場所にあるなど)

ステップ1では、バニラレールアプリを外部で起動できますが(たとえば%x{rails s})、テストに適したシンプルなWebサーバーをプログラムで作成するためのより良い方法があると確信しています。

tl; dr-テスト内で単純なWebサーバーをプログラムで起動する方法は何ですか?

4

3 に答える 3

11

あなたはあなた自身の単純なサーバーを転がすことができます。これはthinとrspecを使用した簡単な例です(これらのgemとラックをインストールする必要があります):

# spec/support/test_server.rb
require 'rubygems'
require 'rack'

module MyApp
  module Test
    class Server
      def call(env)
        @root = File.expand_path(File.dirname(__FILE__))
        path = Rack::Utils.unescape(env['PATH_INFO'])
        path += 'index.html' if path == '/'
        file = @root + "#{path}"

        params = Rack::Utils.parse_nested_query(env['QUERY_STRING'])

        if File.exists?(file)
          [ 200, {"Content-Type" => "text/html"}, File.read(file) ]
        else
          [ 404, {'Content-Type' => 'text/plain'}, 'file not found' ]
        end
      end
    end
  end
end

次に、あなたのspec_helper

# Include all files under spec/support
Dir["./spec/support/**/*.rb"].each {|f| require f}

# Start a local rack server to serve up test pages.
@server_thread = Thread.new do
  Rack::Handler::Thin.run MyApp::Test::Server.new, :Port => 9292
end
sleep(1) # wait a sec for the server to be booted

これにより、ディレクトリに保存するすべてのファイルが提供されますspec/support。それ自体を含みます。他のすべてのリクエストの場合、404が返されます。

これは基本的に、前の回答で述べたようにカピバラが行うことですが、多くの洗練されたものはありません。

于 2012-10-12T21:41:37.760 に答える
5

capybara は、その仕様にアドホック ラック サーバーを使用します。

このシステムを使用して、任意の Rack アプリ (Rails アプリケーションを含む) を提供できますが、Rails の構成は少し複雑になる可能性があります。

于 2012-04-15T22:43:00.973 に答える
2

stub_serverは、事前定義された応答を提供でき、起動が簡単な実際のテスト サーバーです ... SSL サポートも付属しています。

于 2016-11-16T22:57:28.290 に答える