Ruby 将Cucumber与模块化Sinatra应用程序结合使用
我正在使用Sinatra构建一个中型应用程序,当我有一个app.rb文件时,一切都很好,我在Github上遵循了Aslak的指导: 随着应用程序变得越来越大,app.rb文件开始膨胀,我使用Sinatra::Base将许多位重构为“中间件”风格的模块,使用机架式文件(config.ru)等映射内容 这个应用程序运行得很好——但是我的规格爆了,因为没有更多的app.rb文件供webrat运行(如上面链接中定义的) 我试图找到一些例子来说明如何做到这一点——我想我还不习惯Cuke的内部功能,因为我找不到一种方法可以让它覆盖所有的应用程序。我试着只指向“config.ru”而不是app.rb,但这不起作用 我最终做的是在我的支持目录中有一个单独的app.rb文件,它包含了所有必需的东西,这样我至少可以测试模型的东西。我也可以在那里指定路线,但这根本不是我想要做的 所以-问题是:如何让Cucumber正确使用模块化应用程序方法?更新以包括处理多个Sinatra应用程序 需要您的应用程序所在的文件并进行更改Ruby 将Cucumber与模块化Sinatra应用程序结合使用,ruby,cucumber,sinatra,Ruby,Cucumber,Sinatra,我正在使用Sinatra构建一个中型应用程序,当我有一个app.rb文件时,一切都很好,我在Github上遵循了Aslak的指导: 随着应用程序变得越来越大,app.rb文件开始膨胀,我使用Sinatra::Base将许多位重构为“中间件”风格的模块,使用机架式文件(config.ru)等映射内容 这个应用程序运行得很好——但是我的规格爆了,因为没有更多的app.rb文件供webrat运行(如上面链接中定义的) 我试图找到一些例子来说明如何做到这一点——我想我还不习惯Cuke的内部功能,因为我
def app
Sinatra::Application
end
到
只需测试应用程序是否正确
例如,如果您在
config.ru
中定义了要测试的中间件,可以将其加载到应用程序的定义中。多亏了BaroqueBobcat先生——当然,现在的答案似乎非常明显:)。以下是env.rb(/features/support/env.rb):
这是有道理的-但我有3个应用程序-这是我正在努力解决的部分。你可以将你的应用程序包装在Rack::Builder实例中。你是一个明星-非常接近。。。但它把我推向了正确的方向,谢谢你。我将在下面添加代码:)
def app
Rack::Builder.new do
map '/a' { run MyAppA }
map '/b' { run MyAppB }
end
end
require 'sinatra'
require 'test/unit'
require 'spec/expectations'
require 'rack/test'
require 'webrat'
require 'app1'
require 'app2'
require 'app3'
Webrat.configure do |config|
config.mode = :rack
end
class MyWorld
require 'test/unit'
set :environment, :test
include Rack::Test::Methods
include Webrat::Methods
include Webrat::Matchers
Webrat::Methods.delegate_to_session :response_code, :response_body, :response
def app
Rack::Builder.new do
map '/' do
run App1 #important - this is the class name
end
map '/app1' do
run App2
end
map '/app2' do
run App3
end
end
end
end
World do
MyWorld.new
end
def app
eval "Rack::Builder.new {( " + File.read(File.dirname(__FILE__) + '/../config.ru') + "\n )}"
end