我写了一个小测试来检查重定向和 URL 参数。奇怪的是,测试失败了,即使错误消息似乎表明结果实际上是正确的:
Failure/Error: response.should redirect_to(movies_path(:sort => 'title'))
Expected response to be a redirect to
<http://test.host/movies?sort=title>
but was a redirect to
<http://test.host/movies?ratings%5BG%5D=G&ratings%5BNC-17%5D=NC-17&ratings%5BPG%5D=PG&ratings%5BPG-13%5D=PG-13&ratings%5BR%5D=R&sort=title>
URL 是相同的(因为它们应该是相同的),并且预期的参数 'sort=title' 包含在实际结果的参数中。我相信这是一个有效的情况......
根据http://api.rubyonrails.org/classes/ActionDispatch/Assertions/ResponseAssertions.html#method-i-assert_redirected_to:“这个匹配可以是部分的,这样 assert_redirected_to(controller: "weblog") 也将匹配重定向重定向到(控制器:“weblog”,操作:“show”)等等。”
解决方案:我无法让所选答案的提案生效,但回复有助于解释上述链接中的“部分”匹配有些误导,并且代码没有按预期工作。所以,我用收到的所有参数创建了一个Hash
,并将它们添加到“应该重定向_to”测试中:
response.should redirect_to(movies_path(:sort => 'title', :ratings => rest))
其中'rest'是那个哈希。