在 Rails 规范中安装其他路由
Mount additional routes in Rails specs
我想测试嵌入 javascript 小部件(由我的 Rails 应用程序提供)并向我的 rails 应用程序中的端点提交表单的第三方网站。
为此,我创建了一个我用 Capybara 测试的虚拟 sinatra 应用程序:
# spec/system/widget_spec.rb
require 'sinatra/base'
class DummyApp < Sinatra::Base
get '/form' do
@widget_code = params[:widget_code]
erb :form
end
end
require 'rails_helper'
...
我正在定义此应用 之前 Rails 已加载到我的规范中,以便我可以在 routes.rb
中执行以下操作:
mount DummyApp => '/dummy' if defined? DummyApp
如果我 运行 只有这一个规范,这会起作用,但如果我 运行 整个套件, Rails 在我的 DummyApp 定义之前加载。
理想情况下,我想将此行完全从 routes.rb
中删除,并允许我的测试注入自定义路由,这样我的路由文件就不会被与测试相关的路由弄得乱七八糟。
1) 有没有办法在测试中修改 rails 路由?
2) 如果不是,测试此类场景的最佳方法是什么?
有一个助手 with_routing
你可以使用 (docs):
with_routing do |set|
set.draw do
mount DummyApp => '/dummy'
end
# ...
end
我想测试嵌入 javascript 小部件(由我的 Rails 应用程序提供)并向我的 rails 应用程序中的端点提交表单的第三方网站。
为此,我创建了一个我用 Capybara 测试的虚拟 sinatra 应用程序:
# spec/system/widget_spec.rb
require 'sinatra/base'
class DummyApp < Sinatra::Base
get '/form' do
@widget_code = params[:widget_code]
erb :form
end
end
require 'rails_helper'
...
我正在定义此应用 之前 Rails 已加载到我的规范中,以便我可以在 routes.rb
中执行以下操作:
mount DummyApp => '/dummy' if defined? DummyApp
如果我 运行 只有这一个规范,这会起作用,但如果我 运行 整个套件, Rails 在我的 DummyApp 定义之前加载。
理想情况下,我想将此行完全从 routes.rb
中删除,并允许我的测试注入自定义路由,这样我的路由文件就不会被与测试相关的路由弄得乱七八糟。
1) 有没有办法在测试中修改 rails 路由?
2) 如果不是,测试此类场景的最佳方法是什么?
有一个助手 with_routing
你可以使用 (docs):
with_routing do |set|
set.draw do
mount DummyApp => '/dummy'
end
# ...
end