2015-04-04 85 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' 

跑「捆綁'