在Rails规范中安装其他路由

时间:2017-11-22 14:29:48

标签: ruby-on-rails rspec ruby-on-rails-5 rspec-rails

我想测试第三方网站嵌入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

如果我只运行这个规范,这是有效的,但如果我运行整个套件,则在定义DummyApp之前加载Rails。

理想情况下,我希望完全从routes.rb中删除此行,并允许我的测试注入自定义路由,因此我的路径文件不会与测试相关的路径混乱。

1)有没有办法在测试中修改rails路由?

2)如果没有,那么测试此类情景的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用(docs)帮助with_routing

with_routing do |set|
  set.draw do
    mount DummyApp => '/dummy'
  end
  # ...
end