Rspec无法找到插件路由

时间:2013-06-14 19:35:04

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

编辑1

我创建了issue for rspec-rails并制作了repo,以便人们可以自行测试。

原帖

我根据此stackoverflow answer构建了一个插件,并在我的引擎中添加了一条路由,如下所示:

# /config/routes.rb

Myplugin::Engine.routes.draw do
  root to: 'pages#index'
end

我唯一的rspec测试是:

# /spec/controllers/pages_controller_spec.rb

require "spec_helper"

describe Myplugin::PagesController do

  describe "GET /admin" do
    it "routes to pages#index" do
      expect(get: "/admin").to route_to(controller: "pages", action: "index")
    end
  end
end

在我的虚拟应用程序中,我有这条路线:

# /spec/dummy/config/routes.rb

Rails.application.routes.draw do
  mount Myplugin::Engine => "/admin"
end

我在插件的根目录中运行rspec时遇到此错误:

Failures:

  1) Myplugin::PagesController GET /admin routes to pages#index
     Failure/Error: expect(get: "/admin").to route_to(controller: "pages", action: "index")
       No route matches "/admin"
     # ./spec/controllers/pages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'

我尝试了this stackoverflow answer,但它没有改变输出。

有什么想法吗?

我正在使用rspec 2.13.0和rails 3.2.13。

1 个答案:

答案 0 :(得分:0)

虚拟应用程序不应该在您的主应用程序中使用,但应该用于单独测试插件。例如,如果您的插件名为Myplugin并且您希望在没有任何对主应用程序的引用的情况下单独测试插件,您是否可以在vendors/plugins/my_plugin/spec/dummy创建虚拟应用程序并在vendors/plugins/admin/spec或无论你在哪里存储插件。您使用虚拟应用程序,因为插件通常无法单独运行。例如,设计是插件的一个很好的例子,需要一个带有ApplicationController的主应用程序和一个用户模型(以及其他一些东西)才能工作。

如果你只在这个应用程序中使用你的插件,或者你只是想测试它与你的主应用程序是否正常工作,那么只需在spec中创建测试,而不是创建虚拟应用程序。这个工作正常,因为插件已加载到您的主应用程序中。您当然需要在主路径文件中包含以下内容:

# config/routes.rb
Rails.application.routes.draw do
  mount Myplugin::Engine => "/admin"
end

如果您对此有任何疑问,请随时询问。