0

「一致しません」を返すページがあります。またはモデル オブジェクト名の 1 つ。
Cucumber でテストする最良の方法は何ですか? rand をGivenステップでスタブする必要がありますか、それとも次のようなものを提供する必要がありますpage has either a or bか? またはrand、シナリオ アウトライン パラメーターにパラメーターを指定し、このパラメーターをGivenステップで使用し、2 番目のアウトライン列を使用して結果を確認する必要がありますか?

更新: cookiesクッキー モンスターの最高の伝統におけるコントローラーの例:

cookie_controller.rb

  def random_cookie
    if rand(5) == 0 do
      cookie = Cookie.offset(rand(Cookie.count)).first
      response =  "You got 10 free #{cookie.type} cookies for your purchase!"
    else
      response = "Sorry, no cookies left :'("
    end
    respond_to do |format|
        format.json { render json: { response: response } }
  end

find_cookie.feature

Scenario: Looking for cookie
    When I click "find"
    Then I should see "You got 10 free" or "Sorry, no cookies left :'("

ステップはどのようにThen I should see "You got 10 free" or "Sorry, no cookies left :'("見えますか?私は次のようなものを試しました

  (page.should have_content "You got 10 free") || (page.should have_content "Sorry, no cookies left :'(" 

しかし、うまくいきませんでした。

4

3 に答える 3

3

テストの特性の 1 つは、反復可能であることです。つまり、毎回同じ結果を生成する必要があります。テストは、制御不能なパラメーター (外部リソースやランダム ソースなど) に依存するべきではありません。

要点は、「You got 10 free」をチェックするテストと「Sorry, no cookies left」をチェックするテストの 2 つのテストが必要だということです。

のドキュメントではrand、次のスニペットを見つけることができます: 「<code>Kernel::srand を使用して、プログラムの異なる実行間で繰り返し可能な乱数シーケンスを確保できます。」あなたが知っているいくつかの数へのシードは、(常に)1つの結果または他の結果になります。

Scenario: Looking for cookie and finding it
  When I seed with X
  And click "find"
  Then I should see "You got 10 free"
Scenario: Looking for cookie and not finding it
  When I seed with Y
  And click "find"
  Then I should see "Sorry, no cookies left :'("


When /^I seed with (\d+)$/ do |seed|
  srand(seed.to_i)
end

どちらの結果が得られるかを見つける必要がありますが、それらを見つけると、それらは永遠に機能します。

于 2013-06-25T20:59:40.340 に答える