gpt4 book ai didi

ruby-on-rails - rails 引擎 : rake routes show its routes but on rspec execution "No route matches" is thrown

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:34 29 4
gpt4 key购买 nike

我正在尝试测试我的应用程序正在使用的引擎内部的 Controller 。规范不在引擎中,而是在应用程序本身中(我试图在引擎中进行测试,但也遇到了问题)。

我的引擎有以下 routes.rb:

Revision::Engine.routes.draw do
resources :steps, only: [] do
collection { get :first }
end
end

引擎正常挂载在应用routes.rb上:

mount Revision::Engine => "revision"

当我运行 rake routes 时,在最后一行我得到:

Routes for Revision::Engine:
first_steps GET /steps/first(.:format) revision/steps#first
root / revision/steps#first

在我的引擎 Controller (lib/revision/app/controllers/revision/steps_controller.rb) 上,我有:

module Revision
class StepsController < ApplicationController
def first
end
end
end

在 Rspec 上,我测试了这个 Controller :

require 'spec_helper'
describe Revision::StepsController do
it "should work" do
get :first
response.should be_success
end
end

然后当我运行这个规范时,我得到:

ActionController::RoutingError:
No route matches {:controller=>"revision/steps", :action=>"first"}

为了确保该路由不存在,我将其添加到规范中:

before do
puts @routes.set.to_a.map(&:defaults)
end

结果是这样的:

[...]
{:action=>"show", :controller=>"devise/unlocks"}
{:action=>"revision"}

它只有 :action 参数。

可能出了什么问题?

最佳答案

当您尝试测试引擎的 Controller 时,您需要指定您希望 Controller 测试使用的路由集,否则它将针对主应用程序运行。为此,将 use_route::engine_name 传递给 get 方法。

require 'spec_helper'
describe Revision::StepsController do
it "should work" do
get :first, use_route: :revision # <- this is how you do it
response.should be_success
end
end

关于ruby-on-rails - rails 引擎 : rake routes show its routes but on rspec execution "No route matches" is thrown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401797/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com