在 Michael Hartl 的(精彩的)Rails 教程中,我遇到了一个意外的 Rspec 测试失败,格式如下:
“预期的响应是重定向到 < http://test.host/signin > 但重定向到 < http://test.host/signin?notice=Please+sign+in+to+access+this+page . >。”
(在第 10.3 节中可以找到。)因此,从错误中可以看出,服务器正在重定向到相应的页面,除了“请登录”的附加通知。测试代码如下所示:
describe "GET 'index'" do
describe "for non-signed-in users" do
it "should deny access" do
get :index
response.should redirect_to(signin_path)
flash[:notice].should =~ /sign in/i
end
end
...
我在这里做错了吗?我应该如何最好地解决这个问题?
更新:
如果我将代码更改为
response.should redirect_to('http://test.host/signin?notice=Please+sign+in+to+access+this+page.')
然后我得到了实际的 Ruby 错误
失败/错误:flash[:notice].should =~ /sign in/i 预期:/sign in/i,得到:nil(使用 =~)
解析度
问题是我的 deny_access 函数中省略了逗号:
redirect_to signin_path :notice => "Please sign in to access this page."
本来应该
redirect_to signin_path, :notice => "Please sign in to access this page."
这解决了它。现在,这个修复的副作用很有趣,不是吗?这是否意味着它signin_path
本身就是一个可以将散列或参数附加到路径末尾的函数?奇怪,狂野,美妙。