5

난 레일 5와 minitest를 사용하고 있습니다. 궁금 해서요, 내 컨트롤러 메서드의 인스턴스 변수에서 필드의 값을 테스트하려면 어떻게해야합니까? 나는 변수가 정의되어있는 경우 테스트하려는 경우, 내가컨트롤러 인스턴스 변수의 속성 값을 테스트하는 방법은 무엇입니까?

assert_not_nil assigns(:issue) 

을 할 수 있다는 걸하지만 난 @ issue.stop_id의 값을 테스트하려는 경우 내가 불분명 해요. 내 컨트롤러 방법은

# GET /issues/new 
    def new 
    unless user_signed_in? 
     redirect_to new_user_session_path 
    end 
    @issue = Issue.new(stop_onestop_id: params[:stop_id], line_onestop_id: params[:line_id]) 
    end 

내 시험 방법

test "get index page" do 
    get index_url 
    assert_not_nil assigns(:issue) 
    assert_equal test_stop_id, @issue.stop.id 
    assert_equal test_line_id, @issue.line.id 
    assert_response :success 
    end 

이 노력하고있어하지만 난 시험 방법에 선

assert_equal test_stop_id, @issue.stop_id 

에 NoSuchMethodError를 얻고있다

test "logged in should get issues page" do 
    sign_in users(:one) 
    test_stop_id = 1 
    test_line_id = 1 
    get new_issue_url, params: {stop_id: test_stop_id, line_id: test_line_id} 
    assert_equal test_stop_id, @issue.stop_id 
    assert_equal test_line_id, @issue.line_id 
    assert_response :success 
    end 

답변

0

이것은 좋지 않을 수 있습니다. 방법을 처리 할 수 ​​있지만 assigns(:instance_var_name)을 사용하면 인스턴스 변수의 값이 반환되므로 다음과 같이 값을 테스트 할 수 있습니다.

issue_var = assigns(:issue) 
assert_equal test_stop_id, issue_var.stop_id