2009-11-04 71 views
1

我正在做一些使用RSpec和Mocha的控制器測試。下面是一個例子變量在Rails控制器測試中傳遞

describe MenuItemsController, "creating a new menu item" do 
    integrate_views 
    fixtures :menu_items 

    it "should redirect to index with a notice on successful save" do 
    MenuItem.any_instance.stubs(:valid?).returns(true) 
    post 'create' 
    assigns[:menu_item].should_not be_new_record 
    flash[:notice].should_not be_nil 
    response.should redirect_to(menu_items_path) 
    end 
end 

我有一個關於這個例子

  1. 如果是POST方法(和其他REST動詞)的文檔幾個問題嗎?

  2. 如何對象由

    MenuItem.any_instance.stubs創建(?:有效)。返回(真)

    獲得通過控制器行動?

  3. 問題2如何通過post方法直接傳遞參數給控制器?

+0

偉大的答案。謝謝!! – stellard 2009-11-05 01:38:19

回答

0

1.

Post對於

對於Get

對於Put

對於Delete

2.

它並沒有真正通過。 您正在配置您的測試用例,因此 給定的調用有效嗎?由MenuItem實例構成。 那麼你的存根將被使用,並且這個的結果是有效的?檢查將爲真。 您正在決定這個有效的返回結果是什麼?通話

3.

當你存根,在試運行的,而不是執行的代碼正常, 此特定有效嗎?在MenuItem實例上的;您的代碼不會嘗試確定您的menuItem是否有效。它只會返回您在存根中指定的值。在你的情況下爲true

因此,在這裏你不是測試你的MenuItem實例返回true,因爲正確參數,但你正在測試當你的MenuItem實例返回true時發生了什麼。

如果您可以輕鬆地設置一個帶有參數的帖子,該參數將始終爲您的MenuInstance項目輸入一個valid? == true,但這對您來說可能並不實用。

但是,例如,當您有一段連接到WebService的代碼時,可以使用一個存根,該存根返回連接不可用來測試Web服務關閉時代碼中發生的情況。

+2

指向文檔的鏈接不再有效。 – aardvarkk 2013-10-24 01:24:09

0
  1. 你可以找到在Rails docs

  2. 測試REST方法的對象不傳遞給控制器​​文檔,它是由控制器創建。 MenuItem.any_instance.stubs(:valid?).return(true)確保任何MenuItem的實例在您的規範的上下文中創建將返回truevalid?方法。

  3. 殘留方法的主要目的是隔離你正在測試的東西。如果您將參數傳遞給控制器​​,而不是隻存儲控制器測試所需的方法,則現在正在測試您的控制器您的型號。由於您可能在別處指定了您的模型,因此重複只會使您的規格更加複雜和脆弱。

    捻熄valid?方法返回true是降低維護選項時相比,通過所有必要的PARAMS會對自己的模型迴歸true

+0

鏈接到文檔不再有效。 – aardvarkk 2013-10-24 01:24:48

相關問題