我在我的Rails应用程序中使用Clearance进行身份验证。
我使用默认的Minitest堆栈。默认情况下清除仅使用电子邮件和密码字段,因此我添加了name
字段,现在我想对模型进行单元测试以进行一些检查。
到目前为止,这是我的测试。
test "should not save without name" do
user = User.new
user.email = "john@sample.com"
user.password = "foobar"
assert_not user.valid?
end
这是我的模型验证。
validates :name, presence: true
一切都很好,测试失败了。问题是我想用一个用户夹具清理一下我的测试。
一种可行的方法可能是
john:
name: John
email: john@sample.com
password: foobar
然后测试执行失败,说没有一个名为密码的字段。实际上,这个领域被称为encrypted_password
。我可以使用BCrypt::Password.create
方法创建一个但又一次,另一个错误提醒我remember_token
无法为空,我怀疑confirmation_token
字段会发生同样的情况。
所以我的问题是。
有没有什么办法可以使用清除认证库创建一个rails fixture来在我的测试中使用这些数据?
更新 为了澄清由于正确答案而导致的夹具示例,结果夹具是:
john:
name: John
email: john@sample.com
encrypted_password: <%= BCrypt::Password.create("foobar", cost: 4) %>
remember_token: <%= Clearance::Token.new %>
就是这样,它就像魅力一样。
答案 0 :(得分:1)
使用User ActiveRecord API创建对象时,应正确设置所有必填字段。不幸的是,它似乎不会发生在灯具上 - 或者至少它没有发生在你身上(我不使用灯具,所以我不确定)。
您可以将任何所需的令牌设置为:Clearance::Token.new
,这是Clearance用来生成令牌的。