첫 번째 Rails 앱을 만들고 있습니다.Rails 컨트롤러에 문제가 있습니까? (통합?) 테스트
내 사용자 프로필에 사용자가 제목과 설명을 추가 할 수 있도록하고 싶습니다. 나는 그들에게 User
모델의 특성을 만들어 routes.rb
이 추가 :
resources :users do
member do
post 'update_description'
end
end
동일한 방법으로 (아직 작성) 두 속성을 모두 처리 할 것입니다. TDD를 연습하기 위해 사용자가 제목을 제출하면 컨트롤러가이를 데이터베이스에 저장한다는 테스트를 작성하려고했습니다. 나는 그것이 통합 테스트 일 것이라고 생각했지만, 나는 올바른 길을 얻을 수 없었다. (통합 테스트를해야합니까?)하지만 연구를 통해 관련 컨트롤러 테스트 파일에 작동하는 post
문을 작성했습니다.
test "profile submits new title and description successfully" do
log_in_as(@user)
get :show, id: @user
assert_nil @user.title
post :update_description, id: @user, params: { title: "Lorem ipsum" }
# Next:
# @admin.reload.title
# assert @admin.title == "Lorem ipsum"
# assert_template 'users/show'
# Etc.
end
이 다음과 같은 오류 발생합니다 : 다음은 컨트롤러 테스트의 난이 레일은보기 파일을 찾고 하나를 찾을 수없는 의미 수집
ERROR["test_profile_submits_new_title_and_description_successfully", UsersControllerTest, 2017-10-22 21:42:52 -0400]
test_profile_submits_new_title_and_description_successfully#UsersControllerTest (1508722972.17s)
ActionView::MissingTemplate: ActionView::MissingTemplate: Missing template users/update_description, application/update_description with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
* "/var/lib/gems/2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates"
* "/home/globewalldesk/startthis/app/views"
* "/var/lib/gems/2.3.0/gems/web-console-2.0.0.beta3/app/views"
test/controllers/users_controller_test.rb:83:in `block in <class:UsersControllerTest>'
test/controllers/users_controller_test.rb:83:in `block in <class:UsersControllerTest>'
은,하지만 난 볼 수 없습니다 왜 post :update_description
보기를 찾고있다 ... 나는 그것이보기없이 정보를 게시 할 것이라고 생각했다 (나는보기가없는 동일한 방식으로 작동하는 비슷한 경로를 가지고있다). update_description
방법은 Users
컨트롤러에 있습니다. 나는 많은 연구를했지만, 내가 뭘 잘못하고 있는지 알 수 없다. 도움! TIA.
와우, 내가 자바 스크립트 테스트를하는 것에 대해 많은에게 온라인 지난 며칠를 찾는 것을 다 havent 한 경우. 제가 들었던 테스트 프레임 워크 중 하나는 Capybara였습니다. 링크 된 Rails Guides 페이지에서 "시스템 테스트는 Capybara를 기본으로 사용합니다."라고 말합니다. 레일즈 4.2.2가 실제로 사용되는지 알고 있습니까? 어쨌든 최소한 통합 테스트를 위해 솔루션을 시험해 보겠습니다. 시스템 테스트는 곧 배우게 될 또 다른 것 같습니다. 감사! – globewalldesk
그래서,'Users # edit'에 의존하는 대신에'update_description' 라우트를 만들게 된 문제가 있습니다.사용자 편집 페이지 ('users//edit'에 있습니다)는 이름과 패스워드를 가지고 있습니다. 프로필 페이지는'users/'에 있습니다. 사용자가 제목, 설명 및 메시지 수신과 같은 프로필 유형 정보를 추가 할 수 있도록하고 싶습니다. 그래서 나는 그것들이'User' 속성이라는 것을 알았습니까? 하지만 이미 사용자 이름과 암호 정보를 처리하는'edit' 액션이 있습니다. 따라서 사용자 정보 수정을 처리하기위한 새로운 경로를 만들겠습니다. 더 좋은 솔루션이 있습니까? –
globewalldesk
도움에 감사드립니다. 두 가지가 잘못되었습니다. 첫째, 통합 테스트에서 나는 잘못된'post' 라인을 사용하고있었습니다. 이 작업 방식 : 'post "/users/#{@non_admin.id}/update_description", params : {title : "나는 끊임없는 슬픔의 사람입니다." }' 그리고 다른 문제는'Users # update_description' 액션이 _some_ 뷰의 뷰를로드해야한다는 것입니다. (아직 메소드를 작성하지 않았습니다!). 나는'redirect_to user_path (@user)'를 추가하기 만하면되었다. – globewalldesk