0

モバイル版とデスクトップ版でフロントエンドが完全に異なるサイトがあります。

Cucumber でステップを定義するときにステップをスコープすることはできないため、2 つの解決策に行き詰まっています (ご覧のとおり)。

  • 他のバージョンと競合するすべてのステップを記述し、自分がどちらのバージョンであるかを明示的に示します
  • 自分のコンテキストが何であるかを示す「背景」を設定し、すべてのステップ定義を変更してこのコンテキストを確認します

これはどれも私には最適ではないようです。

これを行うためのより良い/よりクリーンな方法はありますか?

4

2 に答える 2

1

これにはタグとフックを使用できます。各シナリオ/機能に、テストするサイトのバージョンでタグを付けます。

@mobile
Scenario: Logging in on mobile
  Given I visit the login page

@desktop
Scenario: Logging in on desktop
  Given I visit the login page

いくつかのフックを使用して、テスト対象のサイトのバージョンを示す変数を設定します。

Before '@mobile' do
  @version = :mobile
end

Before '@desktop' do
  @version = :desktop
end

次に、あなたのステップで:

Given /^I visit the login page$/ do
  if @version == :desktop
    # Desktop specific code
  elsif
    # Mobile specific code
  else
    raise "Don't know what to do!"
  end
end
于 2012-09-10T21:21:30.670 に答える
0

結局、JonMに似たソリューションを使用することになりました。

同時実行のステップとして、正しいコンテキストに渡される「メタ」ステップを作成しました。次に例を示します。

When /^I log in$/ do
  step %Q{I log in on #{@context}}
end

次に、別のファイル(コンテキストで区切られている)に次のようになります。

When /^I log in on mobile$/ do
  # do stuff
end

コンテキストを設定するために、サポートモジュールを作成しました。基本的に、現在のコンテキストを保持し、デフォルトのコンテキストもあります。これは、次の手順で変更できます。

Given /^I am on the "(.*?)" version$/ do |version|
  @context = version
end

コンテキスト部分の設定方法とは異なりますが、全体像はわかります。

これの利点は、無限のコンテキストを持つことができ、この「メタ」ステップがそれらを取得することです。私も肥大化したステップを持っていません。各ステップはシンプルなままで、独自のコンテキストロジックのみを扱います。

欠点は、デフォルト以外のコンテキストごとに、異なるコンテキストにいることを示す背景が必要になることです。

そのようなことはないので、私はここで正しい答えを受け入れません。さまざまなアプローチで対処できますが、これまで、これに関するベストプラクティスすらありません:)

于 2012-09-12T11:49:21.927 に答える