【问题标题】:How to test a Rails engine that depends on its hosting application?如何测试依赖于其托管应用程序的 Rails 引擎?
【发布时间】:2015-03-01 18:39:20
【问题描述】:

我有一个 Rails 应用程序,我正在尝试将代码拆分为多个引擎。

主应用程序拥有一个主控制器 - Api::ApplicationController,引擎中的所有控制器都继承自该控制器,例如:

Api::Products::ProductsController < Api::ApplicationController

我使用 RSpec 进行测试。

当我运行应用程序时,一切正常,但是当我尝试运行引擎的 Rspecs 时,我得到一个错误:

uninitialized constant Api::ApplicationController

如您所知,引擎无法与应用程序分开工作,因此我尝试在规范 (products_controller_spec.rb) 中存根 Api::ApplicationController,但它甚至在开始运行规范之前就失败了。

我想也许我应该以不同的方式实现它,并在某处注入 ApplicationController 功能而不是从它继承,但我不知道在哪里。

我考虑的另一件事是将引擎的规范注入托管应用程序并从那里运行它,但它似乎不起作用,并且无法以这种方式调试规范。

如何测试它?

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    Rails 引擎会创建用于测试目的的小型虚拟应用程序。您需要创建一个具有测试应用程序所需功能的最小应用程序,它将使用它来运行它的规范。

    看这里:

    http://edgeguides.rubyonrails.org/engines.html#testing-an-engine

    对于这种情况,我认为更好的解决方案是将所有引擎作为模块共享的共享应用程序代码放在所有引擎都可以包含的共享 gem 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多