更简单的方法来测试我的简单Rack应用程序?

时间:2012-10-30 15:50:08

标签: ruby testing

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

app = Rack::Builder.new do

    map '/' do
        # ...
    end

    map '/edit' do
        # ...
    end

end.to_app

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

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

有没有东西可以直接插入并在纯Ruby中编写/运行测试?

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

在KISS我相信!

3 个答案:

答案 0 :(得分:4)

最简单的?将Rack::TestTest::Unit一起使用。 gem 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

答案 1 :(得分: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快速编写测试,而无需学习任何内容。

请参阅full example running at CIBox

(如果它没有自动运行,请单击“运行”按钮)

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

您可以尝试使用映射器,例如Appetite一个。

因此您的应用可能如下所示:

class App < Appetite
  map :/

  def index
    'index'
  end

  def edit
    'edit'
  end
end

使用app built by Appetite here

查看相同的示例

答案 2 :(得分:0)

您可以使用机架测试,但这又需要使用minitest / unit测试,但这是测试Rack应用程序的最常用方法。