1

このステップのたびに

Given /blah.../
    ...
    cart = session[:cart] ||= Cart.new
    ...
end

シナリオで実行すると、(2番目の呼び出しから開始して)セッションからカートを取得するのではなく、新しいカートが作成されます。誰もがそれを修正する方法を知っていますか?

私はレール2.2.2、キュウリ0.3.98、ウェブラット0.4.4にいます

PSおそらく回路にセレンを追加することが役立つかもしれません。しかし、キュウリ/セレヌイムを機能させるための予備的な試みは成功しなかったので、「決して機能しないもの」のダークフォースに立ち向かう前に、少しの知恵の呼びかけが必要だと思いました

4

2 に答える 2

0

cucumber はブラウザをシミュレートしているため、これを行うためのクリーンな方法はありません。ブラウザがセッションについて知っているのは、レールがリクエストごとに丁寧にハッシュに変換する不透明な Cookie だけです。

最善の解決策は、アプリケーションに通常の方法でカートを作成させることです。つまり、ログインして製品を選択し、カートに追加します。これはすべて 1 つのステップで実行できますが、再利用可能であり、ユーザーが行った可能性が高いことにより近いため、別のステップで実行します。

Scenario: Foobar
  Given I am a logged in user
  And I add a "wizbang" to my cart
  When I click checkout
  Then I should see '$100'
  When I click 'Pay'
  Then I should see 'Paid'

問題がステップ間で情報を維持することである場合は、シナリオ全体を通じて存続する IVar を使用できます。すなわち:

@cart ||= Cart.new
于 2009-09-24T05:33:53.403 に答える
0

Webrat がアプリケーションをテストするためにブラウザをシミュレートする方法では、セッション サポートは得られません。つまり、セッション ハッシュに情報を保存すると、現在のリクエストでは機能しますが、後続のリクエストでは情報が保存されません。

前のシナリオで作成されたセッションに依存することは、実際には良いテスト方法ではありません。作成する各シナリオは自己完結型である必要があります。「与えられた」ステップでは、ステップの前提条件が満たされていることを確認する必要があります。これにショッピング カートの設定が含まれている場合は、そうする必要があります。

別のヒント: いくつかのアサーションを行った後にさらにテストしたい場合は、1 つのシナリオで複数の Given/When/Then ブロックを連結できます。

Scenario: Foobar
Given the cart exists
When I click checkout
Then I should see '$100'
When I click 'Pay'
Then I should see 'Paid'

すべてのシナリオを 1 つに連結したくなるかもしれませんが、シナリオが失敗すると、アプリケーションのデバッグが難しくなります。私は短いシナリオがたくさん好きです!

于 2009-09-18T07:55:49.170 に答える