Rspec找不到插件路由。

3

编辑1

我为rspec-rails创建了一个问题,并创建了一个repo,以便人们可以自行测试。

原始帖子

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

# /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)>'

我尝试过这个stackoverflow答案,但它并没有改变输出结果。

有什么想法吗?

我正在使用rspec 2.13.0和rails 3.2.13。


我不确定在较新版本的rspec中是否重要,但你尝试过 expect { get: '/admin' }.to .... 吗? - fontno
虽然这不是正确的语法,但我尝试过了,结果出现了语法错误 :) - Flauwekeul
1个回答

0
虚拟应用程序不应该在您的主要应用程序中使用,但应该用于隔离测试插件。例如,如果您的插件名为Myplugin,并且您想要在没有任何引用到您的主应用程序的情况下测试插件,您可以在vendors/plugins/my_plugin/spec/dummy处创建一个虚拟应用程序,并在vendors/plugins/admin/spec或您存储插件的任何其他位置进行测试。您使用虚拟应用程序是因为插件通常无法独立运行。例如,Devise是一个很好的插件示例,需要具有ApplicationController和用户模型(以及其他一些内容)的主应用程序才能正常工作。
如果您只在此应用程序中使用插件,或者您只想测试它是否与您的主应用程序正确地工作,那么只需在spec中正常创建测试,而不需要创建虚拟应用程序。这将正常工作,因为插件已加载到您的主应用程序中。当然,您需要在主路由文件中添加以下内容:
# config/routes.rb
Rails.application.routes.draw do
  mount Myplugin::Engine => "/admin"
end

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


不确定我是否理解。在这种情况下,我想测试Myplugin是否使/admin路由对主机应用程序(将Myplugin作为gem的应用程序)可用。我不能使用Myplugin的spec/dummy文件夹中的虚拟应用程序进行测试吗?换句话说:我可以使用myplugin/spec/dummy中的应用程序来测试行为,就好像它是一个具有Myplugin作为gem的独立应用程序吗? - Flauwekeul
抱歉,也许我在你的问题中理解错了什么:s。但是只要你在插件文件夹中有你的虚拟应用程序,就应该没问题...我以为你是通过另一个使用该插件的应用程序测试你的插件。但如果不是,那么你发布的所有内容都应该没问题,问题肯定出在其他地方.. - jokklan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接