使用rspec测试url是否重定向其他特定URL

时间:2017-06-21 18:04:50

标签: ruby-on-rails ruby redirect testing rspec

我想编写一个测试来验证网址是否重定向到另一个网址。

例如:

http://localhost:3000/news/foobar+baz/bar+boo

http://localhost:3000/news?tools=foobar+baz&sources=bar+boo

使用RSpec我似乎无法找到实现此目的的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在您的情况下,您实际上是尝试从/ foobar + baz / bar + boo重定向到/附加参数。这篇文章可能类似:RSpec testing redirect to URL with GET params

通常,您不应该使用重定向url语法来测试参数cus这不是url位置而是参数。您可以手动提取位置并解析参数以查看它们是否符合您的要求。该帖子中的第一个答案给出了一个例子。

答案 1 :(得分:0)

您应该进行请求测试。 RSpec有:

expect(response).to redirect_to(...)

但它没有对params进行断言

你使用这个:

def expect_to_redirect_to_with_params(expected_url, expected_params)
  redirect_url = response.location
  uri = URI.parse(redirect_uri)
  redirect_params = Rack::Utils.parse_query(uri.query)

  expect(redirect_url).to eq(expected_uri)
  expect(redirect_params).to eq(expected_params)
end

如果您愿意,可以使用自定义matcher代替方法。