在Michael Hartl的新Rails教程书(3.2)的9.2.1节中,定义了一个测试,以确保如果用户登录,他们无法更新(PUT)对另一个用户的更改。如果尝试这样做,则应将用户重定向到主页。由于网页无法直接发布PUT,因此RSPEC测试使用:
此测试用例失败并查看它似乎正在退出的日志,因为UserController中的第一个before_filter(signed_in_user)正在重定向到登录页面。
以下是此示例应用的github页面: https://github.com/treetopvt/sample_app
答案 0 :(得分:1)
在第8章中,有一个从cookie切换到会话的练习。在我的SessionsHelper模块中,我替换了
cookies.permanent[:remember_token] = user.remember_token
与
session[:remember_token] = user.remember_token
转移到会话工作正常,但由于我不再“永久”存储cookie,测试失败。我解除了第8章的练习变化,回到了cookie,所有测试都通过了。现在,关于如何在使用会话时更改授权测试的任何想法?这是我目前的测试:
describe "as wrong user" do
let(:user) { FactoryGirl.create(:user) }
let(:wrong_user) { FactoryGirl.create(:user, email:"wrong@example.com") }
before { sign_in user }
describe "Visiting Users#edit page" do
before { visit edit_user_path(wrong_user) }
it { should have_selector('title', text: full_title('')) }
end
describe "submitting a PUT request to the Users#update action" do
before { put user_path(wrong_user) } #put is an update?
specify{ response.should redirect_to(root_path) }
end
end
答案 1 :(得分:0)
我认为你的章节很困惑,9.2.1是关于注销用户试图使用更新操作而9.2.2是关于登录用户尝试使用其他用户的更新操作。您可能需要检查规范中的before
块,以确保测试的是正确的方案。
例如:9.2.2中使用before { sign_in user }
来设置登录用户,然后在尝试更新其他用户的配置文件时,该用户将被重定向到根路径。看起来您根本没有登录用户,因此身份验证过滤器会停止流程并改为重定向到登录页面。
答案 2 :(得分:0)
请检查Stack Overflow comment。我也遇到了同样的问题,并在sign_in测试助手中替换了那一行(正如“@ Aldo'xoen'Giambelluca”所提到的那样解决了这个问题。只有在第8章尝试并解决了练习时,人们才会面对这个问题。正如@Hoang Pham指出的那样,如果这本书提到那些参加演习的人会面临这个问题,那就更好了。