2011-07-05 7 views
2

私は監査モデルを持っており、HTTP要求が行われたときに新しいレコードが追加されることをテストしたいと思います。モデル仕様からGETを呼び出すにはどうすればよいですか?

私は、コントローラの仕様と同じように

get "/" 

を呼び出すように見えることはできません。私は代わりにメソッドのエラーを取得します。私は何が欠けていますか?

乾杯、 グレアム

答えて

1

コントローラスペックをモデルスペックに書き込むことはできません。 RSpecはコントローラー仕様にのみコントローラー関連のAPIを追加するので、#speC#post #putと#deleteをモデル仕様の中で決して呼び出すことはできません。

あなたは、テストするかのアイデアや場所を取得するためにRSpecのレールプロジェクトのREADMEを読むことができます:https://github.com/rspec/rspec-rails

+0

こんにちはソルニック。これは合理的だと思われますが、直接アクセスできないため、どのようにしてapplication_controllerをテストしますか?それは...ですか?私はちょうどそれをテストするために通常のコントローラを選択することができますが、それは最も関連性の高い場所からテストを離れているようです。ありがとう。 – Simmo

+1

application_controllerはすべてのコントローラのベースですので、共有動作がある場合は、その共有仕様を書き込んで、コントローラの仕様すべてで使用する必要があります 共有仕様に関する素晴らしい記事があります:http://blog.davidchelimsky .net/2010/11/07 /指定のmixins-with-shared-example-groups-in-rspec-2 / – solnic

0

は、私はあなたが...アクションの名前をしなければならないと考えているので、例えば

get :show 

または

get :edit 

あるいは

get :new 
+0

いや、私はまだ取得のために「ノー方法」エラーが発生します。さらに、コントローラーではなくモデル仕様になっているので、アクションを適用するコントローラーはわかりません。 – Simmo

+0

だから私はなぜあなたがモデル仕様からコントローラのアクションを呼び出すのかと混同されていますか?あなたは、そのようなものを表現するためにモック、スタブ、および偽の入力を使用する必要があります。仕様は、レイヤをまたがる統合テストのほかに、レイヤを互いに分離する必要があります。これは一般的な行為であり、法律ではありません。なぜ呼びがうまくいかないのかは分かりません。モデルからこれをやろうとはしませんでした。私は違いがあるかどうか分かりません。正直なところ、 – jaydel

+0

アプリケーションコントローラのbefore_filterメソッドで監査が開始されるため、URLへの呼び出しによって監査レコードが作成されることを確認しようとしています。これをテストする論理的な方法のように思えましたが、私はRSpecが初めてです! – Simmo

関連する問題