在我的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
答案 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)
对于子孙后代,答案(评论中的内容很深)是执行以下操作之一:
更新为包含预期行为的新cucumber-rails-training-wheels
。
确保web_steps.rb
正确设置current_path
变量。
current_path = URI.parse(current_url).path
而不是:
current_path = URI.parse(current_url).select(:path, :query).compact.join('?')