2010-11-21 50 views
27

我有幾個控制器已經設置。現在我想開始爲他們編寫規格測試。是否有自動生成規格文件的命令?我知道rails會爲新資源執行此操作,但我不知道它是否也適用於現有的控制器/模型。如何爲現有控制器生成規格?

回答

42
rails g rspec:controller ControllerName 

當它要求您覆蓋現有控制器時,請鍵入n

+6

這隻生成控制器的spec文件。如果你想要關聯的文件,比如助手或工廠,那麼你需要:'rails g controller ControllerName -s' -s在最後會導致它跳過任何現有的文件,所以你不必擔心這個問題關於壓倒一切。 – Blimey85 2013-05-14 17:51:44

+0

這適用於模型嗎? 'RSpec的:model'?這存在於rspec 1? – 2014-08-04 02:58:52

+0

'rspec'內的命名空間通常會嘗試創建控制器嗎?或者你在想什麼「控制器ControllerName」? – 2016-03-02 03:03:55

4

如果你已經在application.rb中配置的RSpec:

config.generators do |g| 
    g.test_framework  :rspec 
end 

然後rails g controller things會工作。選擇不要在生成文件時覆蓋文件。

所有一個規範時像系統產生是以下幾點:

require 'spec_helper' 

describe ThingsController do 

    it "should be successful" do 
    get :index 
    response.should be_successful 
    end 

end 

我經常手動創建規範,因爲它相當瑣碎。

+6

我注意到有時生成的測試可能比這更詳細。特別是當您生成資源時,測試將包含所有REST方法的代碼。 – picardo 2010-11-21 17:50:34

+0

您在問題標題中專門說了「現有控制器」,所以我沒有注意到您在文本中包含了模型。無論哪種方式,當他們要求覆蓋模型或控制器文件將很好地適合您的目的時,重新運行生成器並說「n」。 :) – 2010-11-22 20:47:25

8

有兩種選擇。如果你想要一個空的規範文件,你可以嘗試使用:

rails g rspec:controller ControllerName 

現在,如果你想用一個基本的REST控制器初始規格SPEC文件,嘗試用:

rails g rspec:scaffold ControllerName