私はいくつかのステップがある「サインアップ」アプリケーションのためにいくつかのキュウリの物語に取り組んでいます。
それから、すべてのステップを一度にカバーするためにHuuuuuuugeストーリーを書くのではなく、それは悪いことですが、私は通常のユーザーのようにコントローラーの各アクションを実行したいと思います。ここでの私の問題は、最初のステップで作成されたアカウントIDをセッション変数として保存しているため、ステップ2、ステップ3などにアクセスすると、既存の登録データが読み込まれることです。
controller.session[..]
RSpec仕様内でアクセスできることは知っていますが、Cucumberストーリーでこれを実行しようとすると、次のエラーで失敗します(また、これはアンチパターンなどです...):
controller.session [:whatever]またはsession [:whatever]を使用する
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
session(:whatever)を使用する
wrong number of arguments (1 for 0) (ArgumentError)
したがって、セッションストアへのアクセスは実際には不可能のようです。私が疑問に思っているのは、それが可能かどうかです(そして、どちらが最善かと思います..):
- セッションストアなどをモックアウトする
- コントローラ内にメソッドを持ち、それをスタブします(たとえば
get_registration
、インスタンス変数を割り当てます...)
私はRSpecの本を(よく、スキミングして)調べ、WebRatなどを調べましたが、私の問題に対する答えは実際には見つかりませんでした...
もう少し明確にするために、サインアッププロセスはステートマシンのようなものです-たとえば、ユーザーは登録が完了する前に4つのステップを進めます-したがって、「ログイン」は実際にはオプションではありません(サイトの動作モデルを壊します) )..。
コントローラーの仕様では、セッション変数に基づいてモデルをロードするメソッドの呼び出しをスタブ化することができましたが、「アンチパターン」行がモックだけでなくスタブにも適用されるかどうかはわかりませんか?
ありがとう!