RSpec如何知道密码是否小于预期长度?

时间:2014-04-29 18:54:16

标签: ruby-on-rails ruby rspec

我正在关注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

3 个答案:

答案 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个字符的字符串,然后断言密码现在无效。

幕后subjectit { 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自动添加。)