在Rails 4中使用具有间隙的夹具用于单元测试用户模型

时间:2014-07-24 00:41:32

标签: ruby-on-rails ruby-on-rails-4 fixtures minitest clearance

我在我的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 %>

就是这样,它就像魅力一样。

1 个答案:

答案 0 :(得分:1)

使用User ActiveRecord API创建对象时,应正确设置所有必填字段。不幸的是,它似乎不会发生在灯具上 - 或者至少它没有发生在你身上(我不使用灯具,所以我不确定)。

您可以将任何所需的令牌设置为:Clearance::Token.new,这是Clearance用来生成令牌的。