我有一个这样的Rack应用程序:
app = Rack::Builder.new do
map '/' do
# ...
end
map '/edit' do
# ...
end
end.to_app
如果没有长尾安装/设置/学习过程,我将如何测试它。
RSpec和minitest真的很棒,但我真的不想学习也不想设置它们。
有没有东西可以直接插入并在纯Ruby中编写/运行测试?
我想编写测试就像上面编写应用程序一样简单,没有先进的技术和陷阱。
在KISS我相信!
答案 0 :(得分:4)
最简单的?将Rack::Test
与Test::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
是一个模拟“浏览器”,可以与您的应用进行通信,就像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
查看相同的示例
答案 2 :(得分:0)
您可以使用机架测试,但这又需要使用minitest / unit测试,但这是测试Rack应用程序的最常用方法。