Ruby 如何设置Rack::URLMap与Sinatra中的RSpec一起工作?
我对Sinatra比较陌生,我想找出一种方法将RSpec与我的Sinatra设置集成 config.ruRuby 如何设置Rack::URLMap与Sinatra中的RSpec一起工作?,ruby,testing,rspec,sinatra,rack,Ruby,Testing,Rspec,Sinatra,Rack,我对Sinatra比较陌生,我想找出一种方法将RSpec与我的Sinatra设置集成 config.ru require 'sinatra' require 'mongoid' require 'uri' require './lib/twilio_wrapper' Mongoid.load!("./config/mongoid.yml") Dir["./controllers/*.rb"].each { |file| require file } run Rack::URLMap.new
require 'sinatra'
require 'mongoid'
require 'uri'
require './lib/twilio_wrapper'
Mongoid.load!("./config/mongoid.yml")
Dir["./controllers/*.rb"].each { |file| require file }
run Rack::URLMap.new(
'/' => HomeController.new,
'/users' => UsersController.new(TwilioWrapper.new)
)
通过这个设置,我可以模块化我的控制器并创建助手类的单个实例(比如TwilioWrapper)。但是,如果我想设置RSpec,我需要将它指向我的应用程序的类。但是,在上面的情况下,因为我使用的是Rack::URLMap,所以我没有特定的应用程序类来指向RSpec
如何以上述方式保持代码模块化,同时将RSpec用于测试?Rack不关心控制器,它关心应用程序。因此,
HomeController
和UsersController
是机架中的两个Sinatra应用程序。这些不是控制器,它们是独立的机架应用程序。我不认为您需要两个应用程序,而是将这两个控制器放在两个文件中,这样您就可以分别指定它们,并保持代码可读性
Sinatra的命名约定是将其命名为类似于MyApp
,以反映这一点。Sinatra是一个平面框架,但您可以根据需要命名“控制器”文件
因此,在文件夹routes
中,您可以有“users.rb”和“home.rb”,但这两个文件都位于顶部
MyApp < Sinatra::Application
所有Rack::Test
所做的就是将您的Sinatra应用程序装入一个测试容器中
另外,请参见Phrogz关于精彩解释的精彩回答。我想我最终真正需要的是指向Sinatra应用程序示例的链接。我要做一点重构,我应该很乐意去做。
def app
run Rack::URLMap.new(
'/' => HomeController.new,
'/users' => UsersController.new(TwilioWrapper.new)
)
end