gpt4 book ai didi

ruby-on-rails - Michael Hartl 的 Rails 教程 : Rspec's "Expected response to be a redirect to ..." is wrong

转载 作者:数据小太阳 更新时间:2023-10-29 07:37:04 26 4
gpt4 key购买 nike

在 Michael Hartl 的(精彩的)Rails 教程中,我遇到了一个意外的 Rspec 测试失败的形式:

"Expected response to be a redirect to <http://test.host/signin> but was a redirect to <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 错误

Failure/Error: flash[:notice].should =~ /sign in/i expected: /sign in/i, got: nil (using =~)


分辨率

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

最佳答案

您的身份验证方法是什么样的?我还没有看到像以前那样将 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

关于ruby-on-rails - Michael Hartl 的 Rails 教程 : Rspec's "Expected response to be a redirect to ..." is wrong,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799498/

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