나는 실수로 '편집'메서드를 '작성'메서드 내에 정의한 레일즈 컨트롤러를 사용합니다. 오류가있는컨트롤러 오류에도 불구하고 편집 URL을 방문하는 동안 오류가 올바르게 표시되지만 테스트는 계속됩니다. 이게 왜 그렇게?
내 컨트롤러 :
class UsersController < ApplicationController
...
def create
@user = User.new(params[:user])
...
def edit
@user = User.find(params[:id])
@title = "Edit user"
@check = "BORK" # something I added for testing the rendered output
end
end
end
예 시험; 나는 시험 (내가 RSpec에 사용) 출력 response.body을 실행할 때
it "should have the right title" do
get :edit, :id => @user
response.should have_selector('title', :content => 'Edit user')
end
따라서, 사용자 edit.html.erb 템플릿이 제대로 렌더링; 모든 인스턴스 변수가 표시됩니다. 그래서 모든 검사가 끝납니다.
'edit'URL을 방문하면 오류가 올바르게 표시됩니다. 템플릿은 @user 인스턴스 변수를 사용하고 올바르게 설정되지 않았습니다. 물론 컨트롤러를 수정하면 오류가 수정됩니다.
왜 테스트가 통과하는지, 왜 테스트에서 모든 인스턴스 변수 값을 볼 수 있는지 이해할 수 없습니까?
본능은 이것이 범위 문제라고 제안합니까? @user가 인스턴스 변수 인 것과 테스트의 범위 내에서 테스트 범위 내에서 설정되었지만 내 컨트롤러에서는 내부 '편집'메서드의 범위 내에 있습니까? 그러나 테스트는 어떻게 '편집'방법을 찾는가? 내부 '편집'방법은 어떤 범위에 존재합니까?
당신은 오류를 붙여 넣을 수 있습니다 ? – Pasta