【问题标题】:Mount additional routes in Rails specs在 Rails 规范中安装额外的路线
【发布时间】:2017-11-22 14:29:48
【问题描述】:

我想测试嵌入 javascript 小部件(由我的 Rails 应用程序提供)并将表单提交到我的 rails 应用程序中的端点的 3rd 方网站。

为此,我创建了一个虚拟 sinatra 应用程序,并使用 Capybara 进行测试:

# 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) 如果不是,那么测试这种场景的最佳方法是什么?

【问题讨论】:

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


    【解决方案1】:

    有一个助手with_routing,你可以使用(docs)

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

    【讨论】:

    • 这很酷,我以前没见过这个 API。不幸的是,它似乎不适用于整个示例组,仅在单个规范中。但是,这确实给了我我认为自己需要做的部分。谢谢!
    • @BenScheirman 也许您可以尝试使用around 挂钩?类似于 resque 示例here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2023-04-08
    相关资源
    最近更新 更多