我正在关注Michael Hartl的rails教程,而Rspec部分一直令人困惑。我已经尝试过阅读其他免费资料,例如蚊帐。无论如何,在他的一个街区中,这里有一段摘录:
describe "with a password that's too short" do
before { @user.password = @user.password_confirmation = "a" * 5 }
it { should be_invalid }
end
据我所知,如果长度恰好是5个字符,则密码无效。但如果密码小于5怎么知呢?
PS。 (如果您需要查看更多规范,here's the link)
答案 0 :(得分:1)
RSpec不知道..它检查它是否对特定型号有效。您可以在模型中定义它需要多长时间。
答案 1 :(得分:1)
我希望在此规范的顶部你有代码:
before { @user = User.new(name: "Example User", email: "user@example.com", password: "mysecret", password_confirmation: "mysecret" }
subject { @user }
正在做的是创建一个新用户,然后使@user
个实例成为测试的主题。
当您达到此特定密码长度测试时,您首先将密码设置为5个字符的字符串,然后断言密码现在无效。
幕后subject
与it { should be_invalid }
一起有效地执行@user.valid?
并期望由于密码字段的长度验证而失败。因此测试通过了。
您在此处使用rspec以确保在用户模型上有良好的密码长度验证。您可以通过更改为6个字符的密码来证明您的测试不是误报。同样,rspec将执行@user.valid?
,但这次测试应该失败,因为用户记录是有效的,但是测试期望它不是。
答案 2 :(得分:0)
如果您检查section 6.3.4,您会看到作者在User
模型上添加了验证,以便您的测试通过。
因此,我们将仅使用几行代码完成安全密码的实施(并进入绿色测试套件)。
首先,我们需要对密码进行长度验证,该密码使用:minimum key,类似于代码清单6.12中的:maximum key:
validates :password, length: { minimum: 6 }
(密码及其确认的存在验证由has_secure_password自动添加。)