2

我在我的 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 夹具来使用许可认证库在我的测试中使用这些数据?

更新: 由于正确答案,为了澄清夹具示例,结果夹具是:

john:
  name: John
  email: john@sample.com
  encrypted_password: <%= BCrypt::Password.create("foobar", cost: 4) %>
  remember_token: <%= Clearance::Token.new %>

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

4

1 回答 1

2

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

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

于 2014-07-24T17:26:31.547 回答