麻烦我正在做我的第一个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