What "User.count" didn't change by 1
手段以及如何解决它?以下是控制台的命令行。
这是我经历过的失败bundle exec rake test
我正在寻找一种方法来修复它们:
$ bundle exec rake test
Run options: --seed 210
# Running:
.....F...F..
Finished in 1.084264s, 11.0674 runs/s, 13.8343 assertions/s.
1) Failure:
UsersControllerTest#test_should_create_user [app/test/control
lers/users_controller_test.rb:20]:
"User.count" didn't change by 1.
Expected: 3
Actual: 2
2) Failure:
UsersControllerTest#test_should_update_user [app/test/control
lers/users_controller_test.rb:39]:
Expected response to be a <redirect>, but was <200>
12 runs, 15 assertions, 2 failures, 0 errors, 0 skips
另外,什么是"Expected response to be a <redirect>, but was <200>"
mean?
下面的代码是我在这个测试中运行的代码:
下面是第 39 行users_controller_test.rb
37 test "should update user" do
38 patch :update, id: @user, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
39 assert_redirected_to user_path(assigns(:user))
40 end
这是控制器中的代码。
对于 1),下面是第 20 行用户_控制器_测试.rb
19 test "should create user" do
20 assert_difference('User.count') do
21 post :create, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
22 end
下面是我的users_controller#update
好像
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
前提条件:
我添加了有价值的电子邮件,稍后我按照 Jonathan MacDonald 的 YouTube 教程“如何在 Windows 7 上安装 Ruby on Rails - 第 4 部分,Ruby on Rails”创建了我的初始用户模型
流程于11:00开始
$ rails generate scaffold user first_name:string last_name:string
$ rake db:migrate
然后在控制台的沙箱中玩了一下之后,我通过以下过程在我的用户模型中添加了电子邮件值6.3.1 哈希密码来自 Railstutorial 组织的电子书:
原始命令:
$ rails generate migration add_password_digest_to_users password_digest:string
My command to add email value in my user model:
$ rails generate migration add_email_to_users email:string
$ rake db:migarate
然后我更新了以下文件:
控制器
1) 'myapp'/app/controllers/users_controller.rb[在许可证()中添加:电子邮件]
def user_params
params.require(:user).permit(:first_name, :last_name, :email)
end
2) 'myapp/test/controllers/users_controller_test.rb'[在“测试“应该创建用户”执行”和“测试“应该更新用户”执行”中添加电子邮件:@user.email]
test "should create user" do
assert_difference('User.count') do
post :create, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
end
# ...
test "should update user" do
patch :update, id: @user, user: { first_name: @user.first_name, last_name: @user.last_name, email: @user.email, }
assert_redirected_to user_path(assigns(:user))
end
Models
1) 'myapp'/app/models/user.rb[通过添加此行来添加电子邮件验证]
validates :email, presence: true, length: { maximum: 255 }
2) 'myapp'/test/models/user_test.rb[在用户设置定义中添加电子邮件值]
def setup
@user = User.new(first_name: "Example", last_name:"User", email: "[email protected] /cdn-cgi/l/email-protection")
end
[add email validation tasks]
test "email should be present" do
@user.email = " "
assert_not @user.valid?
end
test "email should not be too long" do
@user.email = "a" * 244 + "@example.com"
assert_not @user.valid?
end
Views
1) 'myapp'/app/views/users/_form.html.erb[添加电子邮件字段]
<div class="field">
<%= f.label :email %><br>
<%= f.text_field :email %>
</div>
2) 'myapp'/app/views/users/index.html.erb[在表中添加电子邮件列]
<td>
<%= user.email %>
</td>
3) 'myapp'/app/views/users/show.html.erb[在段落中添加电子邮件部分]
<p>
<strong>email:</strong>
<%= @user.email %>
</p>
然后当我跑步时bundle exec rake test
,我一直面临着我问的这些错误。
有一个文件叫users.yml
我一开始并不认为这是相关的。但这实际上是由于这些失败造成的。所以我在我的答案中引用了这个文件中的代码。为了简单起见,我不会在我的问题部分中引用它。