8

我正在编写一个库来包装 tsung 的功能,以便更好地被 rails 应用程序使用。我想编写一些集成测试,归结为以下内容:

  1. 启动一个简单的 Web 服务器
  2. 通过库运行 tsung-recorder
  3. 启动 selenium,将 firefox 配置文件配置为使用 tsung 代理,并让它从步骤 1 中启动的服务器获取页面
  4. 检查记录的图书馆(它存在,它在正确的位置等)

对于第 1 步,虽然我可以在外部启动一个 vanilla rails 应用程序(例如,%x{rails s}),但我很确定有更好的方法来以编程方式创建一个适合测试的简单 Web 服务器。

tl;dr - 在测试中以编程方式启动简单 Web 服务器的方法是什么?

4

3 回答 3

11

您可以推出自己的简单服务器。这是一个使用 thin 和 rspec 的快速示例(必须安装这些 gem,加上 rack):

# 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 使用 ad-hoc Rack 服务器的规格:

任何 Rack 应用程序(包括 Rails 应用程序)都可以使用这个系统提供服务,尽管 Rails 配置可能有点棘手。

于 2012-04-15T22:43:00.973 回答
2

stub_server是一个真正的测试服务器,可以提供预定义的回复,并且很容易启动......也带有 ssl 支持。

于 2016-11-16T22:57:28.290 回答