Ruby on rails Rspec找不到插件路由 编辑1

Ruby on rails Rspec找不到插件路由 编辑1,ruby-on-rails,rspec,ruby-on-rails-plugins,Ruby On Rails,Rspec,Ruby On Rails Plugins,我创建了一个,并制作了一个,这样人们可以自己测试它 原职 我已经根据这一点构建了一个插件,并在我的引擎中添加了一条路径,如下所示: # /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:

我创建了一个,并制作了一个,这样人们可以自己测试它

原职 我已经根据这一点构建了一个插件,并在我的引擎中添加了一条路径,如下所示:

# /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)>'
故障:
1) Myplugin::PagesController获取/管理到页面的路由#索引
失败/错误:期望(get:“/admin”)。将_路由到(控制器:“页面”,操作:“索引”)
没有与“/admin”匹配的路由
#./spec/controllers/pages\u controller\u spec.rb:8:in'block(3层)in'
我试过了,但它不会改变输出

有什么想法吗


我使用的是rspec 2.13.0和rails 3.2.13。

虚拟应用程序不应该在主应用程序中使用,而应该单独用于测试插件。例如,如果您的插件名为
Myplugin
,并且您希望在不引用主应用程序的情况下单独测试插件,那么您可以在
供应商/plugins/my_plugin/spec/dummy
处创建一个虚拟应用程序,并在
供应商/plugins/admin/spec
或您存储插件的任何位置进行测试。您使用虚拟应用程序是因为插件通常无法单独运行。例如,Desive是一个插件的好例子,它需要一个带有
ApplicationController
的主应用程序和一个用户模型(加上一些其他东西)才能工作

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

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

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

我不确定这在较新版本的rspec中是否重要,但您是否尝试过
expect{get:'/admin'}.to….
尽管这不是正确的语法,但我尝试过,并且出现语法错误:)不确定我是否遵循了。在本例中,我想测试Myplugin是否使/admin路由可用于主机应用程序(将Myplugin作为gem的应用程序)。我不能为此使用虚拟应用程序(在Myplugin的spec/dummy文件夹中)吗?换句话说:我可以使用myplugin/spec/dummy中的应用程序来测试行为,就像它是一个独立的应用程序,将myplugin作为gem一样吗?对不起,也许我误解了你问题中的某些内容:s。但是是的,只要你有你的虚拟应用在插件文件夹中,它应该是好的。。。我想你应该通过使用插件的另一个应用程序来测试你的插件。但是如果没有,那么你发布的所有东西都应该可以正常工作,问题一定出在其他地方。没问题。谢谢你的回答:)