2012-02-24 51 views
3

我已經定義:RSpec的成功沒有定義

  • views/pages/about.html.rb視圖,
  • 測試中spec/controllers/pages_controller_spec.rb

    describe "GET 'about'" do 
        it "should be successful" do 
        get 'about' 
        response.should be_success 
        end 
    end 
    

定義:

  • 相應的動作:

    class PagesController < ApplicationController 
    
        # def about 
        # end 
    
    end 
    
  • routes.rb路線:

    Lily::Application.routes.draw do 
        # get "pages/about" 
    

我得到一個錯誤的Web瀏覽器,但RSpec的測試,只要視圖定義順利過關。
這是預期的行爲?


我使用rspec-rails 2.0.1webrat 0.7.1rails 3.2.1
Scott發現一個similar issuerspec-rails關閉維護者。

+0

您能否看到瀏覽器中的錯誤頁面是否進入真實的非200錯誤響應?您可以檢查FireBug/Developer Tools或Rails日誌。 – Chowlett 2012-02-24 10:22:00

+0

是的,它是'404 Not Found'。 – 2012-02-24 10:27:43

+0

@Chowlett:我也認爲這個動作可能會被緩存,但如果我只是創建另一個視圖/測試對,它也可以。 – 2012-02-24 10:38:19

回答

4

這是預期的(也許有些令人驚訝的)行爲。

如果你記住Rails如何區分問題,那麼這很有意義。
控制器不會路由 - 發生在調度程序中。

嘗試在您的測試添加此:

raise controller.params.inspect

Failures: 
    1) PagesController GET pages/about 
    Failure/Error: raise controller.params.inspect 
    {"action"=>"about", "controller"=>"pages"} 

get 'about'不需要路由-Rails的測試框架需要的照顧。由於規範已經知道它應該處理什麼動作,它繼續前進並呼叫PagesController#about

拼圖的缺失部分是只要模板存在,Rails不需要定義動作;它只會渲染about.html.erb

因此,該測試成功,因爲它應該。當你實時呼叫它時,它會失敗,因爲沒有路由。如果你寫了一個請求規範,路由規範或者一個Cucumber測試,它也會失敗。

+0

@zeteic謝謝。在我們交流之後,我昨天在聊天室與丹聊天。這有助於理解我們在聊天過程中看到的內容。 – ScottJShea 2012-02-25 18:03:38

+1

謝謝你的洞察力。因此,除非您測試路由本身,否則在使用RSpec進行測試時不會涉及實際路由?說得通。我不知不覺地認爲RSpec運行一個微服務器,並實際發出HTTP請求,所以這讓我感到意外。 – 2012-02-26 00:14:39

+0

我花了一些自由來稍微改變你的文章中的格式,先生。希望你不介意,但如果你願意,請隨時恢復。我還強調了至關重要的部分,那就是Rails並不需要定義一個行動。我只是通過其他方式進行檢查 - 通過添加路線並在沒有明確的動作定義的情況下查看它。 – 2012-02-26 00:23:20