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。但是是的,只要你有你的虚拟应用在插件文件夹中,它应该是好的。。。我想你应该通过使用插件的另一个应用程序来测试你的插件。但是如果没有,那么你发布的所有东西都应该可以正常工作,问题一定出在其他地方。没问题。谢谢你的回答:)