我创建了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。
答案 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
如果您对此有任何疑问,请随时询问。