首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Sinatra中设置Rack::URLMap与RSpec一起使用?

如何在Sinatra中设置Rack::URLMap与RSpec一起使用?
EN

Stack Overflow用户
提问于 2013-02-07 04:53:44
回答 1查看 2.2K关注 0票数 3

我对Sinatra比较陌生,我想找出一种方法将RSpec与我的Sinatra设置集成在一起。

config.ru

代码语言:javascript
运行
复制
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的同时,以上述方式保持代码模块化?

EN

Stack Overflow用户

回答已采纳

发布于 2013-02-07 05:37:30

Rack不关心控制器,它关心的是应用程序。因此,HomeControllerUsersController是两个Sinatra应用程序“架装”在机架上。这些不是控制器,它们是独立的机架应用程序。我不认为你想要两个应用程序,而是将这两个控制器放在两个文件中,这样你就可以分别指定它们,并保持代码的可读性。

Sinatra的命名约定是将其命名为类似于MyApp的名称以反映这一点。Sinatra是一个扁平的框架,但是你可以随意命名你的“控制器”文件。

因此,在文件夹routes中,您可以使用'users.rb‘和'home.rb’,但这两个文件都位于顶部

代码语言:javascript
运行
复制
MyApp < Sinatra::Application

然后,您可以使用Rack::Test和Rspec进行测试。

如果您确实想要测试两个应用程序,并希望使用Rack::Test w Rspec作为前缀,那么您只需在spec_helper或spec文件中将app定义为:

代码语言:javascript
运行
复制
 def app
  run Rack::URLMap.new(
   '/' => HomeController.new,
   '/users' => UsersController.new(TwilioWrapper.new)
  )
 end

Rack::Test所做的一切就是将你的Sinatra应用程序打包到一个测试容器中。

另外,请参阅how to lay out a Sinatra application上Phrogz的出色回答

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14738590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档