Ruby on rails Rspec身份验证密码测试无故失败
我正在学习RubyonRails和mongoDB(mongomapper),我遵循Michael Hartl的教程,遇到了一个问题。问题是密码验证测试中的某个地方。当我使用控制台并尝试身份验证时,它就像一个符咒,但当运行测试时,相同的身份验证测试通过了前几次,然后突然失败,告诉我db中的密码和变量不匹配。下面是测试代码和测试消息 规格/型号/特殊情况.rb 这是错误代码Ruby on rails Rspec身份验证密码测试无故失败,ruby-on-rails,ruby-on-rails-4,rspec,mongomapper,Ruby On Rails,Ruby On Rails 4,Rspec,Mongomapper,我正在学习RubyonRails和mongoDB(mongomapper),我遵循Michael Hartl的教程,遇到了一个问题。问题是密码验证测试中的某个地方。当我使用控制台并尝试身份验证时,它就像一个符咒,但当运行测试时,相同的身份验证测试通过了前几次,然后突然失败,告诉我db中的密码和变量不匹配。下面是测试代码和测试消息 规格/型号/特殊情况.rb 这是错误代码 bojan@bojan-300E4C-300E5C-300E7C:~/rubyprojects/sample_app$ bun
bojan@bojan-300E4C-300E5C-300E7C:~/rubyprojects/sample_app$ bundle exec rspec spec/special_case.rb
[DEPRECATION] :index option when defining key "email" is deprecated. Put indexes in `db/indexes.rb`
....F
Failures:
1) User return value of authenticate method with valid password
Failure/Error: it { should eq found_user.authenticate(@user.password) }
expected: #<User _id: BSON::ObjectId('53b6b0f6ac04d82c8e000003'), created_at: Fri, 04 Jul 2014 13:49:42 UTC +00:00, email: "boja00@yahoo.com", name: "Bojan Drljaca", password_digest: "$2a$04$Os57kzr4a/1.5Sf5KG5Ib.MV8xThCY0Tok8SiRVC/9b6vK8kiRFTi", updated_at: Fri, 04 Jul 2014 13:49:42 UTC +00:00>
got: #<User _id: BSON::ObjectId('53b6b0f6ac04d82c8e000005'), email: "boja00@yahoo.com", name: "Bojan Drljaca", password_digest: "$2a$04$WGbfIKjDGvK/0nGPaAZXyuiH/z86MVIe0r6TWlQ72mIQw4XmRuR1m">
(compared using ==)
Diff:
@@ -1,2 +1,2 @@
-#<User _id: BSON::ObjectId('53b6b0f6ac04d82c8e000003'), created_at: Fri, 04 Jul 2014 13:49:42 UTC +00:00, email: "boja00@yahoo.com", name: "Bojan Drljaca", password_digest: "$2a$04$Os57kzr4a/1.5Sf5KG5Ib.MV8xThCY0Tok8SiRVC/9b6vK8kiRFTi", updated_at: Fri, 04 Jul 2014 13:49:42 UTC +00:00>
+#<User _id: BSON::ObjectId('53b6b0f6ac04d82c8e000005'), email: "boja00@yahoo.com", name: "Bojan Drljaca", password_digest: "$2a$04$WGbfIKjDGvK/0nGPaAZXyuiH/z86MVIe0r6TWlQ72mIQw4XmRuR1m">
# ./spec/special_case.rb:20:in `block (4 levels) in <top (required)>'
Finished in 0.10159 seconds
5 examples, 1 failure
Failed examples:
rspec ./spec/special_case.rb:20 # User return value of authenticate method with valid password
Randomized with seed 5909
bojan@bojan-300E4C-300E5C-300E7C:~/rubyprojects/sample\u app$bundle exec rspec spec/special\u case.rb
[不推荐]:不推荐使用定义键“email”时的索引选项。将索引放入`db/indexes.rb`
F
失败:
1) 使用有效密码验证方法的用户返回值
失败/错误:它{should eq found_user.authenticate(@user.password)}
预期:#
得到:#
(使用==进行比较)
差异:
@@ -1,2 +1,2 @@
-#
+#
#./spec/special_case.rb:20:in'block(4层)in'
以0.10159秒完成
5例,1例失败
失败的示例:
rspec./spec/special_case.rb:20#使用有效密码验证方法的用户返回值
随机化种子5909
测试有时会通过,但突然失败,并告诉我密码不同(看看散列)
来自调试器的代码
[1] sample_app(#<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1>) » found_user
=> #<User:0x00000007cc18c8> {
"_id" => BSON::ObjectId('53b6b7c1ac04d82e9b000003'),
"created_at" => Fri, 04 Jul 2014 14:18:41 UTC +00:00,
"email" => "boja00@yahoo.com",
"name" => "Bojan Drljaca",
"password_digest" => "$2a$04$wg5lDkRFv2u4P90FZ.5EGesNedNr2IifDMiVT/iEU222llk.c8eea",
"updated_at" => Fri, 04 Jul 2014 14:18:41 UTC +00:00
}
[2] sample_app(#<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1>) » @user
=> #<User:0x0000000718f040> {
"_id" => BSON::ObjectId('53b6b7e3ac04d82ea6000005'),
"created_at" => nil,
"email" => "boja00@yahoo.com",
"name" => "Bojan Drljaca",
"password_digest" => "$2a$04$63/jTwT680HDjlQrUP/dVeTwtHb9.PRygGUTj9LoHypEuVesfEm3S",
"updated_at" => nil
}
[1]示例应用程序(#)»已找到用户
=> # {
“_id”=>BSON::ObjectId('53b6b7c1ac04d82e9b000003'),
“创建时间”=>2014年7月4日星期五14:18:41 UTC+00:00,
“电子邮件”=>”boja00@yahoo.com",
“name”=>“Bojan Drljaca”,
“密码摘要”=>“$2a$04$wg5lDkRFv2u4P90FZ.5EGesNedNr2IifDMiVT/iEU222llk.c8eea”,
“更新时间”=>2014年7月4日星期五14:18:41 UTC+00:00
}
[2] 示例应用程序(#)»@user
=> # {
“_id”=>BSON::ObjectId('53b6b7e3ac04d82ea6000005'),
“在”=>零处创建,
“电子邮件”=>”boja00@yahoo.com",
“name”=>“Bojan Drljaca”,
“密码摘要”=>“$2a$04$63/jTwT680HDjlQrUP/dVeTwtHb9.PRygGUTj9LoHypEuVesfEm3S”,
“更新位置”=>nil
}
问题与密码无关。预期用户具有在处创建的和在处更新的属性,而实际用户没有。我猜你的找到了\u用户
从未保存过
另一种可能是直接测试属性,而不是测试整个用户:
describe "with valid password" do
let(:result) {found_user.authenticate(@user.password)}
it 'should fetch the user' do
@user.email.should eq result.email
@user.name.should eq result.name
end
end
它被保存了,我在mongo控制台中检查了测试数据库。创建的和更新的属性会自动插入时间戳!在user.rb中。这是调试器中的代码,您可以看到找到的用户已正确保存。@user是经过比较(并保存到db中)发现的var用户来自db。您应该将该代码添加到原始帖子中,而不是添加到评论中-这里很难阅读。好吧,看来
@user
没有保存-或者至少它在创建时的/更新时的值为nil
,虽然找到了,但没有使用。将编辑我的答案
describe "with valid password" do
let(:result) {found_user.authenticate(@user.password)}
it 'should fetch the user' do
@user.email.should eq result.email
@user.name.should eq result.name
end
end