2010-12-31 14 views
0

私たちのアプリケーションでは、いくつかの興味のあるドメインモデルに対して、after_create/update/deleteコールバックを記述しました。これらのモデルの中で、変更されたモデルの必要なデータをxml化してAuditテーブルに格納する新しいAuditモデルを作成します。例として、コンサルタントモデルのafter_createコールバックは、以下のようになります。

def after_create
xml = #private xmlize() is called which returns the data of new Consultant object
audit = Audit.new :data=>xml.to_s
audit.save
end
Rspec - オブジェクトをプライベートメソッドでモックする

を今、私は、その保存方法は、RSpecのを使用して呼び出されたかどうかを確認するために、監査対象を模擬するかしたいと思います。それとも、RSpecを使ってxmlの内容を正規表現する方法があれば、Ruby in Rails環境を使ってXMLをどのように行うのがうれしいでしょう。

答えて

0

メソッド内で構築されたため、監査オブジェクトを自然にモックすることはできません。

あなたがしたいことは、AuditFactoryを作成して(somwhere ...)、それを使ってAuditオブジェクトを作成することです。

次に、モックファクトリがモック監査を作成し、監査のsaveメソッドが呼び出されることを期待して、ファクトリと監査の両方を嘲笑することができます。

工場での期待値は正しいxmlを期待するように設定することもできます。

+1

'AuditFactory'クラスを持つことはおそらく冗長です。あなたは[Rubyのそのような構造に対する議論](http://yehudakatz.com/2010/02/15/abstractqueryfactoryfactories-and-alias_method_chain-the-rubyway/)を読んでみたいかもしれません。そして 'Audit.stub!(:new).and_return(mock(...))'を実行し、モックが正しいデータを取得して保存されていることを確認することで '監査 'を模擬することができます。 –

+0

コンストラクタをスタブすることは考えていませんでした。 RubyでのMockingは、Javaよりもはるかに優れています。これは私の答えがRubyで間違っています。おそらく私はそれを削除します! –

+0

ドンとブライアンに感謝します。ブライアン・ドノバンはただの雄牛の目にぶつかりました;) – karthiks

関連する問題