2009-12-11 12 views
7

だから、Sinatraアプリケーションのrspecでコントローラメソッドをスタブする方法を理解しようとしています。主な理由は、アプリケーションの論理的な流れをテストし、特定の条件が満たされたときに必要な機能を呼び出すことです。だから、本質的に、私は私が困難シナトラアプリ内でコントローラのインスタンスにアクセスしていることを抱えている何Sinatraとrspecでコントローラメソッドをスタブする

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

ような何かをできるようにしたいです。私はsinatraコントローラクラスのclass_evalを使って現在の関数をオーバーライドすることができますが、これらの関数が実際に実行されることを主張したいと思います。

誰でもアドバイスをお持ちですか?

ありがとうございました。

答えて

3

ダン、あなたが本当に望んでいるのはコントローラの動作をテストすることだけだと思います。テスターの観点からは、具体的な入力と、おそらく他の特殊な条件(それは他のクラスを模倣またはスタブする)(1)を実際に呼び出すのではなく、出力のために本当に気にするべきではありません。

official documentation for Sinatra + Rack::Testまたはthis blog post from devver.netを確認できます。

(1):コントローラページが他のクラス(モデル、サービスなど)を呼び出している場合は、代わりにこれらのモデルを擬似して、それらに期待を付けてください。たとえば:

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

(このexmapleでRSpecのを)あざけるためのいくつかのより多くの情報がRSpec documentation pagesで見つけることができます。

関連する問題