0

BDD (CS169.x1@edX) に Cucumber を使用すると、「cucumber features/filter_movie_list.feature」の実行に応答して次のメッセージが返されます。

When I uncheck the following ratings: G, PG-13                 # features/step_definitions/movie_steps.rb:44
  Undefined step: "When I uncheck "ratings_G"" (Cucumber::Undefined)
  ./features/step_definitions/movie_steps.rb:52:in `block (2 levels) in <top (required)>'
  ./features/step_definitions/movie_steps.rb:49:in `each'
  ./features/step_definitions/movie_steps.rb:49:in `/I (un)?check the following ratings: (.*)/'
  features/filter_movie_list.feature:30:in `When I uncheck the following ratings: G, PG-13'
...
You can implement step definitions for undefined steps with these snippets:

When /^When I uncheck "(.*?)"$/ do |arg1|
  pending # express the regexp above with the code you wish you had
end

問題の特定の構成には、「features/filter_movie_list.feature」に次のような宣言的なステップがあります。

次の評価のチェックを外した場合: G、PG-13

「features/step_definitions/movie_steps.rb」に宣言的なステップを実装する試み (「features/step_definitions/web_steps.rb」の命令ステップを再利用するため) は次のようになります。

When /I (un)?check the following ratings: (.*)/ do |uncheck, rating_list|
  step "When I uncheck \"ratings_G\""

および動作中の「features/step_definitions/web_steps.rb」ファイル (つまり、gem のインストール後に「rails generate cucumber_rails_training_wheels:install」によって作成されるファイル) には、次のような必須のデフォルト ステップが含まれます。

When /^(?:|I )uncheck "([^"]*)"$/ do |field|
  check(field)
end

また、「features/step_definitions/movie_steps.rb」When I uncheck "ratings_G"への追加が成功したため、「features/step_definitions/web_steps.rb」に Cucumber がアクセスできるようです。誰がそのような行動を引き起こしているのか考えていますか? 変数置換が行われないように、宣言ステップの実装も単純化されています...

4

3 に答える 3

0

この場合、提供されたコース資料は違いを示していますが、非常に類似している2つのステップを区別することはできませんでした。「次のチェックを外すと...」を「次のチェックを外すと...」に変更すると、web_steps.rbがスコープに戻り、必要に応じて実行されます(以前にリンクされた投稿、リンク:キュウリの矛盾するエラーメッセージ、詳細)。

于 2012-12-03T19:38:08.183 に答える
0

私はもう試した:

When I uncheck the following ratings: "G, PG-13"

次に、ステップファイルで:

When /^I uncheck the following ratings: "([^"]*)"$/ do |arg1|
  puts "arg1: #{arg1}"
end

..私のために働くようです。

于 2012-11-23T09:41:40.423 に答える
0

問題

問題は、別のステップからステップを呼び出す方法にあります。

コードの 2 行目:

When /I (un)?check the following ratings: (.*)/ do |uncheck, rating_list|
  step "When I uncheck \"ratings_G\""

次のようなステップ定義を探しています:

When /^When (?:|I )uncheck "([^"]*)"$/ do |field|
  check(field)
end

ステップ正規表現内で「When」を探していることに注意してください。これが存在する可能性は低いため、未定義のステップ エラーです。

解決

ステップからステップを呼び出すには、次のいずれかを実行する必要があります。

1) stepGiven/When/Then キーワードを使用し、含めないようにします。

When /I (un)?check the following ratings: (.*)/ do |uncheck, rating_list|
  step "I uncheck \"ratings_G\""

2) または、Given/When/Then を含めたい場合は、steps代わりに次を使用します。

When /I (un)?check the following ratings: (.*)/ do |uncheck, rating_list|
  steps %Q{
    When I uncheck "ratings_G"
  }

Cucumber wikiを参照してください。

于 2012-11-27T03:23:33.560 に答える