Ruby on rails &引用;User.count";没有';t改变1轨道
什么Ruby on rails &引用;User.count";没有';t改变1轨道,ruby-on-rails,ruby,Ruby On Rails,Ruby,什么“User.count”未按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: UsersCon
“User.count”未按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
这是控制器中的代码。
对于1),下面是users\u controller\u test.rb中的第20行
下面是我的users\u 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
先决条件:
$ 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
one:
first_name: MyString
last_name: MyString
email: MyString
two:
first_name: MyString
last_name: MyString
email: MyString
我添加了有价值的电子邮件。后来,我按照乔纳森·麦克唐纳的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 org的电子书中的哈希密码:
原始命令:
$ 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
one:
first_name: MyString
last_name: MyString
email: MyString
two:
first_name: MyString
last_name: MyString
email: MyString
然后我更新了以下文件:
控制器
1) “myapp”/app/controllers/users\u controller.rb
[添加:许可证中的电子邮件()]
2) 'myapp/test/controllers/users\u controller\u test.rb'
[添加电子邮件:@user.email在“test”中应创建用户“do”,而“test”应更新用户“do”]
型号
1) “myapp”/app/models/user.rb
[通过添加此行为电子邮件添加有效期]
validates :email, presence: true, length: { maximum: 255 }
2) “myapp”/test/modles/user_test.rb
[在用户设置的定义中添加电子邮件值]
def setup
@user = User.new(first_name: "Example", last_name:"User", email: "aaaa@bbbbbbb.com")
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
视图
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测试时,我遇到了我所问的这些错误
有一个名为users.yml
的文件,我一开始认为这与此无关。但这实际上是这些失败的原因。所以我在回答中引用了这个文件中的代码。为了简单起见,我不在问题部分提及它。这可能意味着控制器返回错误。您可能可以通过转储赋值(:user).errors的内容来查看错误。或者另一个回复会有帮助。否则,将分配(:user)。错误。检查应起作用
本应创建用户,但未创建。很多可能的原因,例如重复的电子邮件
您的测试期望在编辑用户后重定向,但rails只是呈现一些页面。在users\u controller\update
中是否有重定向到@user
无法增加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: 'johnsmith@example.com' }
22 end
这些失败是由于“myapp/test/fixtures/users.yml”中缺少电子邮件属性,而稍后在生产环境中添加了电子邮件属性造成的。我用'first\u name'
和'last\u name'
创建了初始用户模型,没有'email'
,正如我在问题中的步骤中所述
有许多命令可帮助在初始创建后为新添加的属性在相关文件中添加属性。但我已经在相关文件中手动添加了属性,如下面的代码所示
“myapp/test/fixtures/users.yml”
原件:
one:
first_name: MyString
last_name: MyString
two:
first_name: MyString
last_name: MyString
更新:
$ 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
one:
first_name: MyString
last_name: MyString
email: MyString
two:
first_name: MyString
last_name: MyString
email: MyString
然后跑
$ bundle exec rake test
Run options: --seed 1540
# Running:
...............
Finished in 2.383035s, 6.2945 runs/s, 8.8123 assertions/s.
15 runs, 21 assertions, 0 failures, 0 errors, 0 skips
不过,我在下面的列表中总结了“1”和“200”的含义。
[1”是什么意思]
要理解这个数字'1'
的含义,您需要阅读下面几行
Expected: 3
Actual: 2
上面说应该是3,但实际上是2。在begging的“myapp/test/fixtures/users.yml”中只有2个属性'first\u name'
和'last\u name'
,而它假设有3个属性,即'first\u name'
,'last\u name'
和'email'
然后我猜这条消息提到了“myapp/test/fixtures/users.yml”中缺少属性的数量,方法是拉起数字'1'
。。
[回答“200”]
我认为这个数字也有其独特的含义,即相关的源代码而不是HTTP状态代码。它实际上只是HTTP状态代码。代码'200'
表示正常,如下面的链接所示。
10.2.1 200正常
请求已成功。与响应一起返回的信息
取决于请求中使用的方法
它说预期的响应是重定向的,而不是彻底的响应。您没有向我们显示导致这些故障的控制器代码。可以这么说,测试中提出的假设并不是由实际的控制器实现的,但是在没有看到控制器本身的情况下很难推断原因。检查log/test.log文件您能给我们提供您的用户测试的所有相关代码吗?这包括设置@user
变量的代码(在您的测试中,而不是控制器)?还向我们展示您的用户模型(以便我们知道有哪些验证)。最可能的问题是,由于某种原因,您未能通过验证,因此用户未被创建…但我们需要验证,我们需要知道您正在使用的信息以及需要进行哪些验证。仅为了解信息,此问题由Stack Overflow社区讨论站点本身应如何运行。欢迎您访问j如果你愿意,可以加入对话。谢谢你的提醒。这很有用。嗨,史蒂夫特森,谢谢你的想法。现在测试工作正常,没有这些vali