我正在尝试使用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
答案 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_context 'a PaperTrail model' do
it { should respond_to(:versions) }
# You can add other assertions here as well if you like.
end
it_behaves_like 'a PaperTrail model'
User
behaves like a PaperTrail model
should respond to #versions
我发现使用自定义匹配器(如be_trailed
)更清晰,更易扩展。