“User.count”没有改变 1 - Rails

2024-04-13

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我一开始并不认为这是相关的。但这实际上是由于这些失败造成的。所以我在我的答案中引用了这个文件中的代码。为了简单起见,我不会在我的问题部分中引用它。


未能增加 User.count 和渲染 的原因相同......您无法创建记录,因为验证失败。

在这次测试中...

  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

您正在引用 @user,但除非您在该测试中进行了设置,否则没有定义 @user 对象。

尝试指定值...

  19   test "should create user" do
  20     assert_difference('User.count') do
  21       post :create, user: { first_name: 'John', last_name: 'Smith', email: '[email protected] /cdn-cgi/l/email-protection' }
  22     end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“User.count”没有改变 1 - Rails 的相关文章

随机推荐