5

私は Cucumber を学習していて、2 つの完全に別個の機能に 2 つのステップがあり、それらが誤って同じ言葉で表現されている場合、Cucumber はそれらに対して 1 つのステップ定義のみを提案することに気付きました。これは、ステップ定義がグローバルであり、共有されることを意図しているということですか?

ビジネス アナリストのチームが、銀行部門と証券部門を持つ金融会社の仕様を作成しているとします。さらに、取引手数料を計算するために、2 人の異なる人がそれぞれの部門の機能を作成しているとします。

銀行員は次のように書いています。

Feature: Transaction Fees
    Scenario: Cutomer withdraws cash from an out-of-netwrok ATM
        Given that a customer has withdrawn cash from an out-of-netwrok ATM
        When I calculate the transaction fees
        Then I must include an out-of-netwrok ATM charge

証券マンが書いてる

Feature: Transaction Fees
    Scenario: Cutomer places a limit order
        Given that a customer has placed a limit order
        When I calculate the transaction fees
        Then I must include our standard limit-order charge

When 句は両方のシナリオで同じであることに注意してください。さらに悪いことに、二人ともこのシナリオを transaction-fees.feature というファイル (もちろん別のディレクトリにあります) に入れました。

Cucumber は、ステップ定義について次の推奨事項を生成します。

You can implement step definitions for undefined steps with these snippets:

this.Given(/^that a customer has withdrawn cash from an out\-of\-netwrok ATM$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.When(/^I calculate the transaction fees$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.Then(/^I must include an out\-of\-netwrok ATM charge$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.Given(/^that a customer has placed a limit order$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

this.Then(/^I must include our standard limit\-order charge$/, function (callback) {
  // Write code here that turns the phrase above into concrete actions
  callback.pending();
});

when 句は 1 回だけ提案されることに注意してください。

  1. これは、2 つのステップ定義ファイルの 1 つだけに入力する必要があるステップ定義が 1 つだけあればよいということですか?
  2. cucumber は機能ファイルを同様の名前の step_definition ファイルと関連付けますか? つまり、transaction-fees.feature を transaction-fees.steps.js に関連付けますか? すべてのステップ定義がグローバルである場合、ファイル/ディレクトリのセットアップは整理のためだけのものであり、実行環境に関する限り何の意味もないと誤解する可能性があります。

お時間を割いてご説明いただきありがとうございます。

4

1 に答える 1

3

ステップ定義は、上記のコードの「this」である World オブジェクトにアタッチされます。

  1. ステップ定義は 1 つだけにする必要があります。それらは共有されることを意図しています。IIRC、Cucumber Boo の 149 ページ ( https://pragprog.com/book/hwcuc/the-cucumber-book ) では、この設計上の決定の詳細について説明しています。ruby ですが、これはキュウリの実装全般で同じだと思います。

  2. Cucumber は機能ファイルと step_definition ファイルを関連付けません。ファイル ツリー/規則は便宜上のものです。

于 2014-10-03T15:31:10.563 に答える