2012-06-26 42 views
3

我是Ruby on Rails世界的新手。assigns()方法vs綁定 - Rails

我注意到至少有一種方法可以從測試用例中訪問控制器實例變量。

實際上,假設該測試方法:

test "should get index" do 
    get :index 
    assert_response :success 
    assert_not_nil assigns(:products) 
end 

products是包含關心控制器內的一個實例變量。當然,測試用例可以參考這個控制器。因此,assigns()方法使用它來檢查控制器實例變量的哈希值,從而允許從之前稱爲此控制器的操作的任何其他文件訪問任何精簡對象。

所以我想兩個問題:

爲什麼不建立一個「綁定」到控制器,而不是使用assigns()方法?

我想象一個版本在那裏是可以做到:

test "should get index" do 
     get :index 
     assert_response :success 
     assert_not_nil @products 
end 

那豈不是更短和更清潔的?

綁定是允許ERB文件來訪問控制器實例變量,顯示了該鏈接的機制:

http://rrn.dk/rubys-erb-templating-system

什麼是不適用的測試用例機制呢? assigns()方法必不可少?

回答

7

如果你帶過來的結合,雖然,這可能傳遞而不應

test "should get index" do 
    @fake_products = [1,2,3] 
    get :index 
    assert_response :success 
    assert_not_nil @fake_products 
end 

你未必想在測試中所有的實例變量在你的控制器實例變量相結合。賦值可以讓你'斷定'你的斷言只是控制器實例變量。

+0

很好解釋:)謝謝 – Mik378