第9章授权测试失败

时间:2012-03-22 18:33:50

标签: ruby-on-rails railstutorial.org

在Michael Hartl的新Rails教程书(3.2)的9.2.1节中,定义了一个测试,以确保如果用户登录,他们无法更新(PUT)对另一个用户的更改。如果尝试这样做,则应将用户重定向到主页。由于网页无法直接发布PUT,因此RSPEC测试使用:

{response.should redirect_to(root_path)}

此测试用例失败并查看它似乎正在退出的日志,因为UserController中的第一个before_filter(signed_in_user)正在重定向到登录页面。

以下是此示例应用的github页面: https://github.com/treetopvt/sample_app

3 个答案:

答案 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指出的那样,如果这本书提到那些参加演习的人会面临这个问题,那就更好了。