キュウリのステップ定義を書くための実際の構文は何ですか?私はそれが異なる方法で書かれているのを見ました。明確な構文はありませんか?アンカーは必須ではありませんが、基本的なルールはありますか?キュウリのテスト定義を書くための構文は何ですか?
私はキュウリを初めて熟知しており、基本を理解するのに役立つ赤ちゃんのステップ情報に感謝します。みんなありがとう!
キュウリのステップ定義を書くための実際の構文は何ですか?私はそれが異なる方法で書かれているのを見ました。明確な構文はありませんか?アンカーは必須ではありませんが、基本的なルールはありますか?キュウリのテスト定義を書くための構文は何ですか?
私はキュウリを初めて熟知しており、基本を理解するのに役立つ赤ちゃんのステップ情報に感謝します。みんなありがとう!
私はあなたにオンラインドキュメントを紹介するつもりだったが、私が知っているオンラインドキュメント(at cucumber.ioとat relishapp.com)はあなたの質問にうまく答えていない。しかし、これには多くの例が含まれており、読む価値があります。
キュウリのRuby実装では、ステップ定義ファイルはディレクトリの.rb
ファイルです。これらのメソッドには、Gherkinステップの実装を定義する一連のメソッド呼び出しが含まれています。 Given
、When
、Then
、And
とBut
:ステップを定義し、いくつかの方法があります
Given /^there is a user named "(.*)"$/ do |username|
# code that creates a user with the given username
end
:ここでは例です。彼らはまったく同じことを行い、いずれかを使って任意のステップを定義することができます。ベストプラクティスは、定義しているステップで一番読みやすいものを使用することです(決してAnd
またはBut
)。
ステップ定義メソッドに渡される引数は、Gherkin .feature
ファイルの1つ以上のステップと一致する正規表現です。上記の例は、次のステップに一致します。
Given there is a user named "Ade Tester"
(「Ade Tester」は何でもかまいません)
Cucumberが正規表現と一致するステップを実行すると、ステップ定義メソッドに渡されたブロックが実行されます。あなたが好きなRubyコードを含めることができます。
正規表現内のマッチンググループ(カッコで囲んだもの)がブロックパラメータとしてブロックに渡されます。一致するグループの数がブロックパラメータの数と一致する必要があります。そうしないと、エラーが発生します。一般的なコンベンションでは、文字列にマッチするマッチンググループを引用符で囲んで、上記のようにステップの固定部分と視覚的に区別しますが、これは純粋に規約であり、実行しないことを選択できます。
正規表現は、デフォルトでステップ全体と一致する必要はありません。定義全体をステップ全体にのみ一致させたい場合は、上の例のように正規表現でそれを強制する必要があります。^
と$
です。あなたが正当な理由がない限り、それをしないでください。 ($
なし)このステップ定義
Given /^there is a user named "(.*)"/ do |username|
create :user, username: username
end
はおそらく悪い考えです
Given there is a user named "Ade Tester" on weekdays but "Dave Schweisguth" on weekends
にマッチします。さらに悪いことに、両方のステップの定義があった場合、Cucumberはどの定義を使用するのかを判断できず、エラーが発生します。
features/step_definitions/documentationにあります。rb:
When /^I go to the "([^"]+)" documentation$/ do |section|
path_part =
case section
when "Documentation"
"documentation"
else
raise "Unknown documentation section: #{section}"
end
visit "/documentation/#{path_part}/topics"
end
Then /^I should see the "([^"]+) documentation"$/ do |section|
expect(page).to have_css('h2.doctag_title a', text: section)
end
これらの手順では、Webアプリケーションを実行します。彼らはまだ実用的である限り、できるだけ簡単です。
言い換えれば、構文はRubyです。 –
良いステップ定義はブロック内に単一のメソッド呼び出しを持つ必要があります。
When "Frank logs in" do
login user: @frank
end
悪いステップの定義は、例えば
When "I login as Frank" do
visit root_path
fill_in login_email, with:
# lots of other stuff about HOW to login
...
end
その他悪いステップの定義は、引数のたくさんの、本当に複雑な正規表現のを使用し、そのブロック内のコードがたくさんあります。
恐ろしいステップ定義は他のステップ定義を呼び出し、bad
ステップ定義が行うことを行います。
私たちは、あなたのフィーチャーファイル(Gherkin)の一部であるべきか、あるいは実際のRubyの実装について話していますか? – homaxto
ありがとうホーマックス。私は実際の実装、コードブロック、特に "do"と "end"の間で話しています。何がそこに行く?それは何でもいい? –
実装では、必要な処理を行うために必要なものがすべて用意されています。あなたのケースではRubyコードになるので、Rubyの構文とコードスタイルによって制限されます。 – homaxto