Rails 컨트롤러 테스트/스펙이 왜 그렇게 구성되었는지에 대한 이유를 이해하지 못한다는 것을 알고 있습니다.Rails 컨트롤러 테스트를 작성할 때 #post vs #get vs #delete?
컨트롤러 테스트를 작성할 때 컨트롤러를 하나의 단위로 취급하고 컨트롤러의 입력과 출력에 대해서만주의하면서 단위 테스트를 작성하는 것이 좋습니다. 예를 들어, 데이터베이스의 특정 상태를 설정하고 로그인하는 사용자를 시뮬레이트하기 위해 일부 Devise 메소드를 스터핑하고, 우리가 post :create
또는 무엇이든 호출하면 해당 컨트롤러 조치로 전송 된 params의 해시를 추가합니다.
그런 다음 출력을 위해 데이터베이스의 결과 상태를 확인하고 응답 HTTP 코드와 리디렉션 등을 확인하고 템플릿 렌더링 프로세스로 전달되는 할당 된 변수를 확인합니다.
컨트롤러는 다양한 RESTful 액션을 실행하기 위해 public 메소드가 호출되는 Ruby 클래스입니다. 따라서 컨트롤러 사양에서는 /kittens/new
과 같은 URL을로드하지 않습니다. 대신 get :new
처럼 컨트롤러 작업을 직접 호출합니다. 경로는 관련성이없는 것으로 간주됩니다. 그것들은 주어진 요청을 호출 할 컨트롤러 액션을 결정하는 시스템의 또 다른 부분 일뿐입니다.
왜 우리는 HTTP 방법을 지정해야합니까 (같은 get
, post
, put
, delete
) 컨트롤러 액션을 호출 할 때? 라우팅이 작동하는 방식의 일부인 외부적인 세부 사항이 아닙니까?
호기심에서 벗어나 컨트롤러 사양 중 하나를 선택하여이 모든 방법을 전환하여 delete :show
및 get :create
과 같은 것으로 끝 맺었습니다. 아무 것도 고장났습니다. 그래서 철저히 혼란 스럽습니다. 컨트롤러 사양에서 테스트중인 코드와 관련이없는 경우이 두 메서드를 구별해야하는 이유는 무엇입니까?
아, 알았어요. 그래, 그 중 몇 가지를 보았고 "와우, 컨트롤러 동작 수를 줄이는 훌륭한 방법"이라고 생각했지만 실제로 테스트에 대한 영향은 생각하지 못했습니다. 감사! –