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。

4

1 回答 1

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

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

于 2013-06-19T08:30:02.813 回答