4

次のシナリオを使用して、Cucumberの使用方法とステップの作成方法を学習しようとしています(「Vegetable」というモデルがあり、「color」という新しい属性を追加しました)。

Scenario: add color to existing vegetable
  When I go to the edit page for "Potato"
  And I fill in "Color" with "Brown"
  And I press "Update Vegetable Info"
  Then the color of "Potato" should be "Brown"

現在「補助輪」を使用しているので、Webステップ(web_steps.rb)があります。

When /^(?:|I )go to (.+)?/ do |page_name|
  visit path_to(page_name)
end

これで、「野菜のホームページに移動したとき」などの簡単なページナビゲーションでこれがどのように機能するかがわかりました。私がしなければならないのは、paths.rbへのパスを追加することだけです。

When /^the vegetable home page/
  '/vegetables'

ただし、上記の例では、特定の野菜「/ vendorables / 1」(Potato url)を使用して特定のパスに移動する必要があります。

これを行う方法がわからないので、独自のステップを作成してみました。

When /I go to the edit page for "(.*)"/ do |vegetable_name|
  flunk "Unimplemented"
end

しかし、エラーが発生します:

Ambiguous match of "I go to the edit page for "Potato"":

features/step_definitions/vegetable_steps.rb:15:in `/go to the edit page for "(.*)"/'
features/step_definitions/web_steps.rb:48:in `/^(?:|I )go to (.+)$/'

You can run again with --guess to make Cucumber be more smart about it
   (Cucumber::Ambiguous)

これは私がこれを行うことになっている方法ですか?または、web_stepsの「goto」ステップを使用して、paths.rbファイルに何らかの方法でIDを指定しますか?さまざまなキュウリのチュートリアルを何時間も読んだ後、これを開始する方法を理解しようとしています。

4

2 に答える 2

10

DVGが述べたように、エラーが発生したのは2か所でマッチングステップがあったためです。私自身の質問に答えるために、私はすでに提供されている「web_step」に頼ることができます。

When /^(?:|I )go to (.+)?/ do |page_name|
  visit path_to(page_name)
end

次のコードをpaths.rbに追加したら:

def path_to(page_name)
  case page_name

  when /^the edit page for "(.*)"$/
    edit_vegetable_path(Vegetable.find_by_name($1))

これを正しく動作させることができました。

于 2012-06-21T16:49:45.373 に答える
5

問題は、ステップ2の場所を一致させていることです。ステップ定義はグローバルです。したがって、2つの場所を記述していないステップを使用するように機能を変更するか、冗長なステップを削除する必要があります。

また、機能は非常に低レベルのhas-ui-detailsの方法で記述されています。これにより、機能が変更に対して脆弱になり、ビジネス要件が変更されない限り、キュウリの仕様が変更されることはありません。試してみることを検討してください

Given a vegetable named "Potato"
When I mark the vegetables color as "Brown"
Then the Potato should be "Brown"

このようにして、仕様を変更せずにフォームを自由に試すことができます。これが要点です。

于 2012-06-21T02:46:56.307 に答える