Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rspec断言加密密码不是纯文本_Ruby On Rails_Tdd_Rspec - Fatal编程技术网

Ruby on rails rspec断言加密密码不是纯文本

Ruby on rails rspec断言加密密码不是纯文本,ruby-on-rails,tdd,rspec,Ruby On Rails,Tdd,Rspec,我如何在rspec中编写一个测试来确保密码不会以纯文本形式存储在我的rubyonrails应用程序中 我并不真正关心实现,因为我不知道具体是什么插件或者我将如何编写密码加密(有很多例子) 我只想要一个独立于实现的失败测试。然后,当我实现我的代码时,我可以确信我没有明文密码 我想我需要保存用户(使用密码),然后再次获取用户并检查密码是否与纯文本版本不一致 我走对了吗 我有这些空测试: 请描述“密码加密”是否执行 它“应该有一个加密的密码属性” 它“应该设置加密密码” 它“应该加密密码” 结束 正

我如何在rspec中编写一个测试来确保密码不会以纯文本形式存储在我的rubyonrails应用程序中

我并不真正关心实现,因为我不知道具体是什么插件或者我将如何编写密码加密(有很多例子)

我只想要一个独立于实现的失败测试。然后,当我实现我的代码时,我可以确信我没有明文密码

我想我需要保存用户(使用密码),然后再次获取用户并检查密码是否与纯文本版本不一致

我走对了吗

我有这些空测试:


请描述“密码加密”是否执行
它“应该有一个加密的密码属性”
它“应该设置加密密码”
它“应该加密密码”
结束

正如您所说,您描述的行为是密码不能以简单的形式恢复,因此请尝试编写一个规范来描述它,而不是加密,这更像是一个实现细节

specify "a user's password should not be readable when they are loaded from the database" do
  my_password = 'foobar22'
  u = User.create :password => my_password, :password_confirmation => my_password
  u.reload
  u.password.should_not == my_password
end
它的结构和措辞可能会更好,但如果您只是存储和读取明文密码进行身份验证,则会给出一个失败的规范

我认为,除非您自己实现加密(这通常是不可取的),否则您不会从指定加密工作方式中获得太多好处


如果您选择使用现成的系统(例如Desive、clearance等),您可能会发现编写集成测试来检查将系统连接到项目中的方式是否正确工作比测试认证系统的细节更有用(作者应该已经这样做了,否则会找到不同的身份验证系统!)。

太好了!感谢您的帮助。