我已經決定這的確是一個壞主意。最後我將它移到了視圖規範中。
最終,這樣做更有意義,不僅因爲它在視圖規範中正確對待了視圖,而且還因爲它允許我在一個地方檢查模型的所有渲染特性 - 而不是通過一堆模型規範。
現在我已經完成了它,但我不確定爲什麼這個路徑從一開始就不明顯,但是隻要有人問自己同樣的問題,我會在我的初始實現中粘貼一個例子:
規格/視圖/ angelxml/angel_views_spec.rb
require 'spec_helper'
module Angelxml
describe "angel views" do
it_behaves_like 'angel view', Message.new
it_behaves_like 'angel view', Question.new
it_behaves_like 'angel view', Transfer.new
it_behaves_like 'angel view', Voicemail.new
it_behaves_like 'angel view', AngelAction.new, "action"
it_behaves_like 'angel view', CcExp.new, "ccexp"
it_behaves_like 'angel view', Comment.new
it_behaves_like 'angel view', CreditCard.new, "creditcard"
it_behaves_like 'angel view', Currency.new, nil, true
it_behaves_like 'angel view', Date.new, nil, true
it_behaves_like 'angel view', ErrorStrategy.new
it_behaves_like 'angel view', Goto.new, nil, true
it_behaves_like 'angel view', Invalid.new, nil, true
it_behaves_like 'angel view', Keyword.new
it_behaves_like 'angel view', Link.new, nil, true
it_behaves_like 'angel view', NoLink.new, "no"
it_behaves_like 'angel view', Number.new
it_behaves_like 'angel view', Play.new
it_behaves_like 'angel view', Prompt.new
it_behaves_like 'angel view', Response.new
it_behaves_like 'angel view', Time.new, nil, true
it_behaves_like 'angel view', Valid.new
it_behaves_like 'angel view', Var.new, nil, true
it_behaves_like 'angel view', VariableList.new, "variables"
it_behaves_like 'angel view', YesLink.new, "yes"
it_behaves_like 'angel view', YesNo.new
end
end
規格/支持/ shared_examples_for_angel_view
shared_examples_for 'angel view' do |angel_model,node_name,no_close_tag|
it 'model should render as xml' do
model_name = angel_model.class.name.demodulize
model = FactoryGirl.build(model_name.underscore.to_sym)
node_name = model_name if node_name.nil?
node_name = node_name.upcase
render model
response.body.should include("<"+node_name)
response.body.should include("</"+node_name+">") unless no_close_tag
end
end