2012-06-26 2 views
3

Ruby on Rails를 처음 사용했습니다.assigns() 메소드 대 바인딩 - 레일

테스트 케이스에서 컨트롤러 인스턴스 변수에 액세스하는 방법이 하나 이상 있음을 발견했습니다.

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 

당신은 반드시 테스트의 모든 인스턴스 변수는 컨트롤러에서 인스턴스 변수와 결합 싶지 않을 것이다 안된다. Assigns를 사용하면 컨트롤러 인스턴스 변수에만 어설 션을 적용 할 수 있습니다.

+0

설명 : 감사합니다. – Mik378