7

だから私はSinatraアプリのrspecでコントローラーメソッドをスタブする方法を見つけようとしています。これの主な理由は、アプリケーションの論理フローをテストし、特定の条件が満たされたときにアプリケーションが必要な関数を呼び出すことを確認することです。だから、本質的に、私は次のようなことができるようになりたいです

controller.should_receive(:fancy_method).and_return("This is a string")

私が苦労しているのは、sinatraアプリ内のコントローラーインスタンスにアクセスすることです。sinatraコントローラークラスのclass_evalを使用して現在の関数をオーバーライドすることはできますが、これらの関数が実際に実行されることを表明したいと思います。

誰かアドバイスはありますか?

ありがとう。

4

1 に答える 1

3

ダン、あなたが本当に望んでいるのは、コントローラーのアクションをテストすることだと思います。テスターの観点からは、実際に何と呼ばれるかを気にする必要はありません。特定の入力と、の特別な条件(他のクラスをモックまたはスタブするなど)が与えられた場合は、出力を気にする必要があります(1)。

Sinatra + Rack :: Testの公式ドキュメント、またはdevver.netのこのブログ投稿を確認できます。

(1):コントローラーページが他のクラス(モデル、サービスなど)を呼び出している場合は、代わりにこれらをモックして期待することができます。例えば ​​:

SomeClass.should_receive(:msg).with(:arg).and_return(:special_value)

モックの詳細(この例ではRSpecを使用)については、RSpecのドキュメントページを参照してください。

于 2009-12-12T15:59:29.977 に答える