Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将Cucumber与模块化Sinatra应用程序结合使用_Ruby_Cucumber_Sinatra - Fatal编程技术网

Ruby 将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的内部功能,因为我

我正在使用Sinatra构建一个中型应用程序,当我有一个app.rb文件时,一切都很好,我在Github上遵循了Aslak的指导:

随着应用程序变得越来越大,app.rb文件开始膨胀,我使用Sinatra::Base将许多位重构为“中间件”风格的模块,使用机架式文件(config.ru)等映射内容

这个应用程序运行得很好——但是我的规格爆了,因为没有更多的app.rb文件供webrat运行(如上面链接中定义的)

我试图找到一些例子来说明如何做到这一点——我想我还不习惯Cuke的内部功能,因为我找不到一种方法可以让它覆盖所有的应用程序。我试着只指向“config.ru”而不是app.rb,但这不起作用

我最终做的是在我的支持目录中有一个单独的app.rb文件,它包含了所有必需的东西,这样我至少可以测试模型的东西。我也可以在那里指定路线,但这根本不是我想要做的

所以-问题是:如何让Cucumber正确使用模块化应用程序方法?

更新以包括处理多个Sinatra应用程序

需要您的应用程序所在的文件并进行更改

  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