麻煩我正在做我的第一個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>'
我推測,這意味着Rails正在尋找一個視圖文件,並不能找到一個,但我沒有看到爲什麼post :update_description
它尋找一個視圖...我認爲這將張貼信息沒有一個視圖(我有一個類似的路徑,以相同的方式,沒有看法)。 update_description
方法在Users
控制器中。我做了很多研究,但我無法弄清楚我做錯了什麼。幫幫我! TIA。
哇,我一直在尋找網上很多過去幾天的這樣做的JavaScript測試。我聽說過的一個測試框架是Capybara,在這裏你鏈接到Rails Guides頁面,它說:「系統測試使用Capybara作爲基礎。」你知道我使用的是Rails 4.2.2嗎?無論如何,我會嘗試你的解決方案,至少對於集成測試。系統測試看起來是另一件要學習的東西(很快)。謝謝! – globewalldesk
所以,下面是導致我創建'update_description'路線而不是依賴'Users#edit'的問題。用戶編輯頁面(位於'users//edit')具有名稱和密碼。個人資料頁面位於'users/'處。我想讓用戶可以添加profile-y類型的信息,如標題,描述和接收消息。所以我想......那些是'用戶'屬性,對吧?但是我已經有了一個'edit'動作來處理用戶名和密碼信息。所以我只需製作一條新路線來處理用戶信息的編輯。 有沒有更好的解決方案? –
globewalldesk
感謝您的幫助。我弄錯了兩件事。首先,在集成測試中,我使用了錯誤的「post」行。這工作: 'post「/users/#{@non_admin.id}/update_description」, PARAMS:{title:「我是不斷悲傷的人。」 }' 而另一個問題是'用戶#update_description'操作應該加載_some_視圖(我還沒有寫出方法!)。我只是添加了'redirect_to user_path(@user)',它工作! – globewalldesk