我有一个rails应用程序,我正在尝试将代码分成几个引擎。
主应用程序保存一个主控制器 - Api::ApplicationController
,引擎中的所有控制器都继承自该控制器,例如:
Api::Products::ProductsController < Api::ApplicationController
我使用RSpec进行测试。
当我运行应用程序时,一切工作都很完美,但是当我尝试运行引擎的Rspecs时,我收到一个错误:
uninitialized constant Api::ApplicationController
如您所知,引擎无法与应用程序分开工作,因此我尝试在规范(products_controller_spec.rb)中存根Api::ApplicationController
,但在它甚至开始运行规范之前就失败了。
我想也许我应该以不同的方式实现它,并在某处注入ApplicationController功能而不是从它继承,但我不知道在哪里。
我考虑的另一件事是将引擎的规格注入托管应用程序并从那里运行它,但它似乎不起作用,并且无法以这种方式调试规范。
我该如何测试?
答案 0 :(得分:0)
Rails Engines创建用于测试目的的小型虚拟应用程序。您需要创建一个具有测试应用程序所需功能的最小应用程序,它将使用它来运行它的规范。
见这里:
http://edgeguides.rubyonrails.org/engines.html#testing-an-engine
对于这种情况,我认为更好的解决方案是将所有引擎共享的共享应用程序代码作为共享gem中的模块共享,以便所有引擎都可以包含。