1

我正在尝试在 Rails 3 中使用 paper_trail v2.6.3 的示例,方法是遵循 paper_trail 的Github 文档。我想为一个模型编写一个规范,让我检查它的版本是否在 paper_trail 下,例如:

it { should be_trailed }

并且 be_trailed 应该是一个自定义的 rspec 匹配器,它应该检查模型是否是版本化的。

我如何编写规范?

PS我不想还原版本。我只是想检查它是否有版本。

我按照 Michael Hartl 的Rails 教程在 demo_app 上使用它:

class User < ActiveRecord::Base
  attr_accessible :email, :name
  has_paper_trail
end 
4

2 回答 2

2

如果您要问如何编写 RSpec 匹配器,文档在此处

如果您询问匹配器应该做什么,您可以尝试检查对象是否响应 paper_trail 提供的方法。例如

RSpec::Matchers.define :be_trailed do
  match do |actual|
    actual.respond_to?(:versions)
  end
end
于 2012-11-10T05:21:53.263 回答
2

共享上下文

我个人喜欢通过 Rspec 的共享上下文测试我的模型是否包含 PaperTrail,如下所示:

./spec/support/shared_contexts/paper_trail_contexts.rb

shared_context 'a PaperTrail model' do
  it { should respond_to(:versions) }

  # You can add other assertions here as well if you like.
end

./spec/models/user_spec.rb

it_behaves_like 'a PaperTrail model'

Rspec 输出

User
  behaves like a PaperTrail model
    should respond to #versions

我发现这比使用自定义匹配器更清晰、更可扩展,例如be_trailed.

于 2014-12-11T02:56:14.863 回答