如何忽略Cucumber paths.rb中的URL参数?

时间:2013-01-20 03:18:12

标签: ruby-on-rails url dynamic cucumber

在我的support / paths.rb文件中,我的一个case子句是:

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

但是,在某些流程中,重定向到结帐页面会向URL添加一些参数,因此重定向不是'/ store / checkout'而是(例如)'/ store / checkout?email_confirmation = 1'

问题是这会导致一些断言失败并使用Cucumber,例如下面的第3行:

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在'?'之后忽略参数在重定向的网址?

Then I should be on the checkout page

2 个答案:

答案 0 :(得分: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(/\?.*$/, '')

答案 1 :(得分:0)

对于子孙后代,答案(评论中的内容很深)是执行以下操作之一:

  1. 更新为包含预期行为的新cucumber-rails-training-wheels

  2. 确保web_steps.rb正确设置current_path变量。

    current_path = URI.parse(current_url).path
    

    而不是:

    current_path = URI.parse(current_url).select(:path, :query).compact.join('?')