3

我有一个这样的机架应用程序:

app = Rack::Builder.new do

    map '/' do
        # ...
    end

    map '/edit' do
        # ...
    end

end.to_app

如果没有长尾安装/设置/学习过程,我将如何测试它。

RSpec 和 minitest 真的很棒,但我不想学习也不想设置它们。

有什么东西我只是插入并立即用普通的 Ruby 编写/运行测试吗?

我想编写像我在上面编写应用程序一样简单的测试,没有高级技术和陷阱。

在吻我信任!

4

3 回答 3

4

最简单的?Rack::Test与 一起使用Test::Unitgem install rack-test并运行ruby filename.rb

require "test/unit"
require "rack/test"

class AppTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    Rack::Builder.new do
      map '/' do
        run Proc.new {|env| [200, {'Content-Type' => 'text/html'}, "foo"] }
      end

      map '/edit' do
        # ...
      end
    end.to_app
  end

  def test_index
    get "/"
    assert last_response.ok?
  end
end

更新:请求 RSpec 样式 - gem install rspec;运行rspec filename.rb

require 'rspec'
require 'rack/test'

describe 'the app' do
  include Rack::Test::Methods

  def app
    Rack::Builder.new do
      map '/' do
        run Proc.new {|env| [200, {'Content-Type' => 'text/html'}, "foo"] }
      end

      map '/edit' do
        # ...
      end
    end.to_app
  end

  it 'says foo' do
    get '/'
    last_response.should be_ok
    last_response.body.should == 'foo'
  end
end
于 2012-10-30T16:06:21.953 回答
4

你可以试试Specular+Sonar捆绑。

Specular用于在您需要的任何地方编写测试。

Sonar是一个模拟“浏览器”,可以与您的应用程序进行通信,就像它一样rack-test,但具有一些独特的功能和更简单的工作流程。

使用它们很简单:

...
app.to_app

Spec.new do
  include Sonar
  app(app)

  get
  check(last_response.status) == 200
  # etc...
end
puts Specular.run

所以你把你的规范放在你的应用程序旁边,用纯 Ruby 快速编写测试,而无需学习任何东西。

查看CIBox 上运行的完整示例

(如果没有自动运行,点击运行按钮)

PS:以这种方式编写 Rack 应用程序有点痛苦。

您可以尝试一个映射器,比如Appetite一个。

所以你的应用可能看起来像这样:

class App < Appetite
  map :/

  def index
    'index'
  end

  def edit
    'edit'
  end
end

查看相同的示例,但使用此处构建的应用程序Appetite

于 2012-10-30T16:15:39.957 回答
0

您可以使用 rack-test 但这又需要使用 minitest/unit test,但这是测试 Rack 应用程序的最常见方式。

于 2012-10-30T15:53:51.873 回答