2009-11-25 9 views
5

私は現在Sinatraアプリのキュウリのヘルパーメソッドをスタブすることに苦労しています。キュウリのスタッビングシナトラヘルパー

私は(クッキーによる)簡単なセッション認証とシナトラアプリを持っていると私は私のキュウリシナリオのlogged_in?ヘルパーメソッドをスタブすることで、認証を有効にします。 セッションについてはSinatraとCucumberに問題があるようですので、問題を回避するためにMochaを使用することを考えました。

しかし、 -Block内からSinatra::Applicationインスタンスにアクセスして、どのようにしてメソッドをスタブすることができないのですか。

+0

これらのことに全く慣れていないので、私はあなたの質問のタイトルをお祝いします。 – spender

+0

私は意図しない言葉遣いを避けるためにタイトルを変更する必要がありますか? – Lennart

答えて

2

あなたがSinatra::Application.class_eval

Editを使用して、右のコンテキストを取得することができます:完全な説明のためのオリジナルポスターの答えを参照してください。私が直接Before do ... end - ブロック

以内に私の認証メカニズムを無効にする必要がありますように

+0

申し訳ありませんが、私はあなたが私の質問を誤解していると思います。 logged_in?メソッドはすでにsinatraアプリケーション内で動作しますが、統合テスト(特定のワークフローをテストするための認証なし)のためにスタブする必要があります。主な問題は、キュウリのステップからアプリケーションのインスタンスにアクセスする方法がわかりません。 – Lennart

+0

私は参照してください。私は今理解していると思う。たぶんSinatra :: Application.class_eval {} –

+0

でこれがうまくいきました。ありがとう、私はあなたにそのヒントの小道具を与えることができますか?私は自分の質問に答えて、自分が何をしたのかを明確にします。 – Lennart

3

それはそうだから、私はlogged_in?current_user方法を上書きfeatures/support/ファイルに配置hooks.rbになってしまいました。

Before do 
    MySinatraApplicationClass.class_eval do 
    helpers do 
     def logged_in? 
     return true 
     end 
     def current_user 
     # This returns a certain Username usually stored 
     # in the session, returning it like 
     # that prohibits different user logins, but for 
     # now this is enough for me 
     "Walter" 
     end 
    end 
    end 
end 

私はの世話をしなければならなかった唯一のことは、アプリケーション内の他のアクションが直接sessionから読まないのではなく、これらのヘルパーを使用することです。

悲しいことに、私はキュウリを通じてセッションベースのシナトラのアプリケーションを処理するこの方法は、すでにどこか別の場所に記述されていると私はちょうど私の問題は違うと思ったと思います。