В замечательном учебнике Майкла Хартла по Rails я получаю неожиданный сбой теста Rspec в форме:
"Ожидаемый ответ будет перенаправлением на <<a href="http://test.host/signin" rel="nofollow">http://test.host/signin>, но былперенаправление на <<a href="http://test.host/signin?notice=Please+sign+in+to+access+this+page." rel="nofollow">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 [:Уведомление] .should = ~ / войти / я ожидал: / войти / i, получил: ноль (используя = ~)
Разрешение
Проблема в том, что в моей функции 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
сама по себе является функцией, которая может принимать хеш или аргументы, добавляемые в конец пути?Странно, дико и замечательно.