Ruby on rails Rspec身份验证密码测试无故失败

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

我正在学习RubyonRails和mongoDB(mongomapper),我遵循Michael Hartl的教程,遇到了一个问题。问题是密码验证测试中的某个地方。当我使用控制台并尝试身份验证时,它就像一个符咒,但当运行测试时,相同的身份验证测试通过了前几次,然后突然失败,告诉我db中的密码和变量不匹配。下面是测试代码和测试消息

规格/型号/特殊情况.rb

这是错误代码

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