2015-04-04 84 views
0

我想在我的引擎中使Rails控制器规范工作。控制器测试看起来是这样的: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:试图找到app/views文件夹我的Rails假人./spec/internal

控制器规格失败。到目前为止,我通过从spec/internal/app到我的真实./app的符号链接解决了问题。

是否有一个更干净的方式来找到我的看法?我希望Rails dummy可以直接从引擎中提取应用程序文件夹,但不会在没有链接的情况下发生。

回答

0

对于引擎,测试将进入引擎内的spec目录,并将其测试为完全独立的应用程序,而不依赖于常规的应用程序。从那里它将有权访问在其配置文件中定义的路由。

0

这听起来像你的宝石可能没有Rails::Engine的子类,因此不会自动定位在宝石内的Rails标准目录。在你的情况下,你会想要一个名为Notes::Engine的课程,这个课程通常生活在lib/notes/engine.rb,并且是Rails::Engine的一个子类。作为加载你的宝石的一部分,你还需要加载该文件。

你可以看到这样的例子在Gutentag宝石 - 子类: https://github.com/pat/gutentag/blob/master/lib/gutentag/engine.rb

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

(Gutencag使用燃烧测试,虽然不是路线,但它可能作为一个有用的参考一般)。

+0

Thanks @pat!我确实有'Rails :: Engine'子类。否则'Notes :: Engine.routes'这行不起作用。燃烧readme提到'routes.rb'文件,但我使用上面的方法来避免代码重复。 – SystematicFrank 2015-04-04 13:25:19

+0

我想可能只是将'config/routes.rb'文件和'app'文件夹的符号链接从生成的虚拟文件生成到我的引擎。它的作品,但它是如此肮脏的黑客,我想知道是否有更好的方法。 – SystematicFrank 2015-04-04 13:27:20

+0

顺便说一句。符号链接方式是我解决这里提到的两个问题的方法:https:// github。com/pat/combustion#using-actioncontroller-and-actionview – SystematicFrank 2015-04-04 13:32:25

0

我有类似的问题(问题2)。而正是因为我有苗条的模板,并在Gemfile中不宝石“超薄导轨”,也为Rails 5您需要的宝石“轨控制器测试”

所以尽量增加

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

跑“捆绑'