gpt4 book ai didi

ruby-on-rails - cucumber 测试重定向

转载 作者:行者123 更新时间:2023-11-28 19:42:08 24 4
gpt4 key购买 nike

已找到一些建议:http://openmonkey.com/articles/2009/03/cucumber-steps-for-testing-page-urls-and-redirects

我已经将上述方法添加到我的网络步骤定义中,编写了我的功能,运行它并得到了一个关于 nil 对象的错误。经过一些调查,我注意到,我没有响应和请求对象,它们是零

来自 web_steps.rb:

Then /^I should be on the (.+?) page$/ do |page_name|
request.request_uri.should == send("#{page_name.downcase.gsub(' ','_')}_path")
response.should be_success
end

Then /^I should be redirected to the (.+?) page$/ do |page_name|
request.headers['HTTP_REFERER'].should_not be_nil
request.headers['HTTP_REFERER'].should_not == request.request_uri
Then "I should be on the #{page_name} page"
end

request和response对象都是nil,为什么?

最佳答案

您在 Cucumber 中使用 WebRat 或 Capybara 作为驱动程序吗?您可以通过查看 features/support/env.rb 来判断。我使用的是 Capybara,所以我的包括以下几行:

  require 'capybara/rails'
require 'capybara/cucumber'
require 'capybara/session'

默认值过去是 WebRat,但最近切换到 Capybara,因此网络上旧示例的许多代码无法正常工作。假设您也在使用 Capybara...

request.request_uri - 你需要 current_url 来代替。它返回您的驱动程序所在页面的完整 URL。这不如只获取路径有用,所以我使用这个助手:

def current_path
URI.parse(current_url).path
end

response.should be_success - 使用 Capybara(在某种程度上,Cucumber)的最大挫折之一是它完全热衷于只与用户可以看到的内容进行交互。你can't test for response codes使用 capybara 。相反,您应该测试用户可见的响应。重定向很容易测试;只需断言您应该在哪个页面上。 403 有点诡计。在我的应用程序中,这是一个标题为“拒绝访问”的页面,所以我只是对此进行测试:

within('head title') { page.should_not have_content('Access Denied') }

下面是我如何编写一个场景来测试有时应该重定向而其他时间不应该重定向的链接:

Scenario: It redirects
Given it should redirect
When I click "sometimes redirecting link"
Then I should be on the "redirected_to" page

Scenario: It does not redirect
Given it shouldn't redirect
When I click "sometimes redirecting link"
Then <assert about what should have happened>

关于ruby-on-rails - cucumber 测试重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4887706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com