0

私のsupport/paths.rbファイルでは、私のcase句の1つは次のとおりです。

when /the checkout page/ then '/store/checkout'

ただし、一部のフローでは、チェックアウトページへのリダイレクトによってURLにいくつかのパラメーターが追加されるため、リダイレクトは「/ store / checkout」ではなく、(たとえば)「/ store / checkout?email_confirmation=1」になります。

問題は、これにより、以下の3行目など、一部のアサーションがCucumberで失敗することです。

Given I am on the checkout page
When I proceed with a blank email address
Then I should be on the checkout page
And I should see "You must provide an email address."

手順3は次の場合に失敗します。

   Then I should be on the checkout page                              # features/step_definitions/web_steps.rb:185
  expected: "/store/checkout",
       got: "/store/checkout?email_confirmation=1" (using ==)

'?'の後のパラメータをCucumberに無視させるにはどうすればよいですか?リダイレクトされたURLで?

Then I should be on the checkout page

4

2 に答える 2

0

私はGeoffのアドバイスに従い、web_steps.rbを変更することでこれを解決しました。具体的には、定型ステップの定義で

Then /^(?:|I )should be on (.+)$/ do |page_name|

私はこの主張を変えました

current_path.should == path_to(page_name)

これに対して、「?...」パラメータ文字列の前のURLの一部のみを比較します。

current_path.gsub(/\?.*$/, '').should == path_to(page_name).gsub(/\?.*$/, '')
于 2013-01-20T19:52:56.323 に答える
0

後世のために、答え(コメントの奥深くにある)は次のいずれかを行うことです:

  1. cucumber-rails-training-wheels期待される動作を含むnewに更新します。

  2. が変数web_steps.rbを正しく設定していることを確認してください。current_path

    current_path = URI.parse(current_url).path
    

    これの代わりに:

    current_path = URI.parse(current_url).select(:path, :query).compact.join('?')
    
于 2013-01-21T22:55:01.777 に答える