使用Rails 3使用paper_trail进行测试

时间:2012-11-10 04:30:13

标签: ruby-on-rails-3 paper-trail-gem

我正在尝试使用Github Documentation for paper_trail在Rails 3中使用paper_trail v2.6.3的示例。我想为一个模型编写一个规范,让我检查它在paper_trail下的版本是否类似于:

it { should be_trailed }

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

如何编写规范?

P.S。我不想还原版本。我只是想检查它是否有版本。

我在Michael Hartl Rails Tutorial之后的demo_app上使用它:

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

2 个答案:

答案 0 :(得分:2)

如果您正在询问如何编写RSpec匹配器,则文档为here

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

RSpec::Matchers.define :be_trailed do
  match do |actual|
    actual.respond_to?(:versions)
  end
end

答案 1 :(得分:2)

共享上下文

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

./规格/支持/ 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

./规格/模型/ user_spec.rb

it_behaves_like 'a PaperTrail model'

Rspec输出

User
  behaves like a PaperTrail model
    should respond to #versions

我发现使用自定义匹配器(如be_trailed)更清晰,更易扩展。