Ruby on rails RubyonRails教程第三版,第9章:用户测试失败\u edit\u test.rb
我一直收到三个错误,我不知道为什么。我正在尽我最大的努力学习本教程,我已经浏览了第9章,没有发现任何错误。正在运行bundle exec rake测试。我得到以下三个错误:Ruby on rails RubyonRails教程第三版,第9章:用户测试失败\u edit\u test.rb,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我一直收到三个错误,我不知道为什么。我正在尽我最大的努力学习本教程,我已经浏览了第9章,没有发现任何错误。正在运行bundle exec rake测试。我得到以下三个错误: FAIL["test_unsuccessful_edit", UsersEditTest, 2015-08-22 09:09:06 +0900] test_unsuccessful_edit#UsersEditTest (1440202146.96s) expecting <"users/edit"&
FAIL["test_unsuccessful_edit", UsersEditTest, 2015-08-22 09:09:06 +0900]
test_unsuccessful_edit#UsersEditTest (1440202146.96s)
expecting <"users/edit"> but rendering with <[]>
test/integration/users_edit_test.rb:12:in `block in <class:UsersEditTest>'
FAIL["test_successful_edit", UsersEditTest, 2015-08-22 09:09:06 +0900]
test_successful_edit#UsersEditTest (1440202146.97s)
expecting <"users/edit"> but rendering with <[]>
test/integration/users_edit_test.rb:25:in `block in <class:UsersEditTest>'
FAIL["test_successful_edit_with_friendly_forwarding", UsersEditTest, 2015-08-22 09:09:07 +0900]
test_successful_edit_with_friendly_forwarding#UsersEditTest (1440202147.07s)
Expected response to be a redirect to <http://www.example.com/users/762146111/edit> but was a redirect to <http://www.example.com/>.
Expected "http://www.example.com/users/762146111/edit" to be === "http://www.example.com/".
test/integration/users_edit_test.rb:43:in `block in <class:UsersEditTest>'
第43行具有以下代码:
assert_redirected_to edit_user_path(@user)
我有一个_header.html.erb文件,其中有一个链接,应该指向用户的编辑页面,但它只是重定向到索引。我有一个app/views/users/edit.html.erb文件,所以我不知道为什么它没有显示出来。以下是设置链接的代码:
这是我的users\u controller.rb文件的代码。我怀疑问题在于我的correct\u user
方法没有按预期触发。(顺便说一句,我已经尝试在“edit”方法中注释代码,但问题仍然存在。)
以下是config/routes文件:
root 'static_pages#home'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
resources :users
我怀疑我的问题的答案非常简单,但我不知道是什么错了。这是users\u edit\u test.rb文件
require 'test_helper'
class UsersEditTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "unsuccessful edit" do
# log_in_as(@user)
get edit_user_path(@user)
log_in_as(@user)
assert_template 'users/edit'
patch user_path(@user), user: { name: '',
email: 'foo@invalid',
password: 'foo',
password_confirmation: 'bar' }
assert_template 'users/edit'
end
test "successful edit" do
# log_in_as(@user)
get edit_user_path(@user)
log_in_as(@user)
assert_template 'users/edit'
name = "Foo Bar"
email = "foo@bar.com"
patch user_path(@user), user: { name: name,
email: email,
password: '',
password_confirmation: '' }
assert_not flash.empty?
assert_redirected_to @user
@user.reload
assert_equal @user.name, name
assert_equal @user.email, email
end
test "successful edit with friendly forwarding" do
log_in_as(@user)
get edit_user_path(@user)
# log_in_as(@user)
assert_redirected_to edit_user_path(@user)
name = "Foo Bar"
email = "foo@bar.com"
patch user_path(@user), user: { name: name,
email: email,
password: 'foobar',
password_confirmation: 'foobar' }
assert_not flash.empty?
assert_redirected_to @user
@user.reload
assert_equal @user.name, name
assert_equal @user.email, email
end
end
需要“测试助手”
类UsersEditTest
虽然您没有在此处上载用户\u编辑\u测试.rb
文件,但我实际上阅读了您提到的那本书中的内容,然后还从中获得了源代码
因此,我在本地运行了与您相同的测试(bundle exec-rake-test-test/integration/users\u-edit\u-test.rb
),它通过得很好。没有测试失败。但是,我发现,如果测试“编辑不成功”
测试中缺少登录为(@user)
,那么它将失败,并显示与您在此处发布的错误消息完全相同的错误消息。这是有道理的,因为如果您没有(@user)登录(即登录用户),则它无法为该用户呈现编辑页面,因此会出现以下错误:
expecting <"users/edit"> but rendering with <[]>
只需复制此文件并用此文件替换当前文件的内容。然后,所有的测试都会通过。虽然您没有在这里上传
users\u edit\u test.rb
文件,但我实际上阅读了您提到的书中的,然后还从它的
因此,我在本地运行了与您相同的测试(bundle exec-rake-test-test/integration/users\u-edit\u-test.rb
),它通过得很好。没有测试失败。但是,我发现,如果测试“编辑不成功”
测试中缺少登录为(@user)
,那么它将失败,并显示与您在此处发布的错误消息完全相同的错误消息。这是有道理的,因为如果您没有(@user)登录(即登录用户),则它无法为该用户呈现编辑页面,因此会出现以下错误:
expecting <"users/edit"> but rendering with <[]>
只需复制此文件并用此文件替换当前文件的内容。然后,所有测试都将通过。我现在也在学习本教程,我的测试通过得很好,因此我将我的测试与您的测试进行比较,您需要进行以下更改:
成功测试
和不成功测试
中,将以(@user)
身份登录到获取编辑用户路径(@user)
之前李>
成功测试中,执行相反的操作:将以(@user)
的身份登录到(@user)
获取编辑用户路径(@user)之后正确的\u user
方法:
redirect_to(root_url) unless @user == current_user?(@user)
应该是
redirect_to(root_url) unless current_user?(@user)
进行这些更改并重新运行测试套件将使您的测试通过。我现在也在学习本教程,并且我的测试通过得很好,因此我将我的测试与您的测试进行比较,您需要进行以下更改:
成功测试
和不成功测试
中,将以(@user)
身份登录到获取编辑用户路径(@user)
之前李>
成功测试中,执行相反的操作:将以(@user)
的身份登录到(@user)
获取编辑用户路径(@user)之后正确的\u user
方法:
redirect_to(root_url) unless @user == current_user?(@user)
应该是
redirect_to(root_url) unless current_user?(@user)
进行这些更改并重新运行测试套件将使您的测试通过。我遵循相同的教程,但遇到相同的错误:
expecting <"users/edit"> but rendering with <[]>
还有这个:
test "successful edit" do
log_in_as(@user)
get edit_user_path(@user)
assert_template 'users/edit'
name = "Name"
email = "valid@valid.com"
patch user_path(@user), user: { name: name,
email: email,
password: "",
password_confirmation: "" }
assert_not flash.empty?
assert_redirected_to @user
@user.reload
assert_equal name, @user.name
assert_equal email, @user.email
end
实际上现在它可以按任何顺序工作我把两个方块。。我知道
test "unsuccesful edit" do
log_in_as(@user)
get edit_user_path(@user)
assert_template 'users/edit'
patch user_path(@user), user: { name: "",
email: "invalid@invalid",
password: "foo",
password_confirmation: "bar" }
assert_template 'users/edit'
end
test "successful edit" do
log_in_as(@user)
get edit_user_path(@user)
assert_template 'users/edit'
name = "Name"
email = "valid@valid.com"
patch user_path(@user), user: { name: name,
email: email,
password: "",
password_confirmation: "" }
assert_not flash.empty?
assert_redirected_to @user
@user.reload
assert_equal name, @user.name
assert_equal email, @user.email
end
michael:
name: michael Example
email: michael@Example.com
password_digest: <%= User.digest('password') %>
michael:
name: michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>