小编Car*_*eca的帖子

Rails引擎:rake路由显示其路由但在rspec执行时"抛出无路由匹配"

我正在尝试测试我的应用程序正在使用的引擎内部的控制器.规范不在引擎内,而是在应用程序本身(我试图在引擎内测试但也有问题).

我的引擎有以下路由.rb:

Revision::Engine.routes.draw do
  resources :steps, only: [] do
    collection { get :first }
  end
end
Run Code Online (Sandbox Code Playgroud)

引擎通常安装在应用程序routes.rb上:

mount Revision::Engine => "revision"
Run Code Online (Sandbox Code Playgroud)

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

Routes for Revision::Engine:
first_steps GET /steps/first(.:format) revision/steps#first
       root     /                       revision/steps#first
Run Code Online (Sandbox Code Playgroud)

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

module Revision
  class StepsController < ApplicationController
    def first
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

在Rspec上,我测试这个控制器:

require 'spec_helper'
describe Revision::StepsController do
  it "should work" do
    get :first
    response.should be_success
  end
end
Run Code Online (Sandbox Code Playgroud)

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

ActionController::RoutingError:
   No route matches {:controller=>"revision/steps", :action=>"first"}
Run Code Online (Sandbox Code Playgroud)

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

before do
  puts @routes.set.to_a.map(&:defaults)
end
Run Code Online (Sandbox Code Playgroud)

结果如下:

[...] …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing rspec ruby-on-rails

9
推荐指数
1
解决办法
804
查看次数

标签 统计

rspec ×1

ruby ×1

ruby-on-rails ×1

unit-testing ×1