【问题标题】:Rails Engine cannot find templatesRails 引擎找不到模板
【发布时间】:2015-04-04 12:34:28
【问题描述】:

我正在尝试使 Rails 控制器规范在我的引擎中工作。控制器测试如下所示:

module Notes
  describe NotesController do
    routes { Notes::Engine.routes }

    it 'renders index' do
      get 'index'
    end
  end
end

目前我正在使用Combustion gem 生成的虚拟,所以我的虚拟配置路线是:

# spec/internal/config/routes.rb
require 'notes'
require Notes::Engine.root.join('config/routes')

Rails.application.routes.draw do
  mount Notes::Engine => '/', as: 'notes'
  # mount Notes::Engine => '/notes'
end

问题 1:

我试图通过安装引擎来避免将引擎路由复制粘贴到虚拟配置文件中。但是,我找不到正确的配置来使 routes { Notes::Engine.routes } 行在我的规范中变得多余。

问题 2:

尝试在我的 Rails 虚拟对象 ./spec/internal 上查找 app/views 文件夹时,控制器规范失败。到目前为止,我通过从spec/internal/app 到我的真实./app 的符号链接解决了这个问题。

有没有更简洁的方式来查找我的观点?我希望 Rails dummy 直接从引擎中提取应用程序文件夹,但没有链接就不会发生。

【问题讨论】:

    标签: ruby-on-rails ruby rspec rails-engines


    【解决方案1】:

    对于引擎,测试位于引擎内的 spec 目录中,您将其作为一个完全独立的应用程序进行测试,独立于您的常规 Rails 应用程序。从那里它将可以访问在其配置文件中定义的路由。

    【讨论】:

      【解决方案2】:

      听起来您的 gem 可能没有 Rails::Engine 的子类,因此不会自动在 gem 中定位 Rails 标准目录。在您的情况下,您需要一个名为Notes::Engine 的类,它通常位于lib/notes/engine.rb,并且是Rails::Engine 的子类。作为加载 gem 的一部分,您还需要加载该文件。

      您可以在 Gutentag gem 中看到一个示例 - 子类: https://github.com/pat/gutentag/blob/master/lib/gutentag/engine.rb

      还有要求: https://github.com/pat/gutentag/blob/master/lib/gutentag.rb#L23

      (Gutencag 使用 Combustion 进行测试,虽然不是路线,但一般来说它可能是一个有用的参考。)

      【讨论】:

      • 谢谢@pat!我确实有Rails::Engine 子类。否则Notes::Engine.routes 行将不起作用。燃烧自述文件提到了routes.rb文件,但我使用上面的方法来避免代码重复。
      • 我认为很可能只使用config/routes.rb 文件的符号链接和从生成的虚拟对象到我的引擎的app 文件夹。它有效,但它是如此肮脏的黑客,我想知道是否有更好的方法。
      • 顺便说一句。符号链接方法是我解决这里提到的两个问题的方法:github.com/pat/combustion#using-actioncontroller-and-actionview
      • 我以前不需要符号链接...当然对我来说感觉很骇人:|
      • 您可以将您的 spec_helper.rb 文件添加到问题中吗?
      【解决方案3】:

      我遇到了类似的问题(问题 2)。这是因为我在 gemfile 中有纤薄的模板,而不是 gem 'slim-rails',而且对于 Rails 5,你需要 gem 'rails-controller-testing'

      所以尝试添加

      gem 'slim-rails'
      gem 'rails-controller-testing'
      

      运行“捆绑”

      【讨论】:

        猜你喜欢
        • 2020-10-30
        • 1970-01-01
        • 2020-08-27
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多