4

在 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本身就是一个可以将散列或参数附加到路径末尾的函数?奇怪,狂野,美妙。

4

1 回答 1

2

您的身份验证方法是什么样的?我以前没有看到像这样添加到查询字符串中的 Flash 通知:/ 它让我相信你的方法可能不正确。它应该是这样的:

def deny_access
  redirect_to signin_path, :notice => "Please sign in to access this page."
end

或者

def deny_access
  flash[:notice] = "Please sign in to access this page."
  redirect_to signin_path
end
于 2011-01-26T02:21:56.607 回答