【问题标题】:Chapter 9 Authorization Test Fails第 9 章 授权测试失败
【发布时间】:2012-03-22 18:33:49
【问题描述】:

在 Michael Hartl 的新 Rails Tutorial Book (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

【问题讨论】:

    标签: ruby-on-rails railstutorial.org


    【解决方案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
    

    【讨论】:

    • 作者应该为做过练习的人提到这个案例。真的,我花了几个小时才解决它。最后我找到了这个答案。
    【解决方案2】:

    我认为您的章节混淆了,9.2.1 是关于尝试使用更新操作的注销用户,而 9.2.2 是关于尝试对其他用户使用更新操作的登录用户。您可能需要检查您的规范中的 before 块,以确保您正在测试正确的场景。

    例如:before { sign_in user } 在 9.2.2 中用于设置登录用户,然后在尝试更新其他用户的配置文件时,该用户将被重定向到根路径。看起来您根本没有登录用户,因此身份验证过滤器会停止流程并重定向到登录页面。

    【讨论】:

    • 你是对的,它是 9.2.2。这似乎是在测试之间不记得登录用户的情况。
    • 在第 8 章中有一个从 cookie 切换到会话的练习。在我的 SessionsHelper 模块中,我将 cookies.permanent[:remember_token] = user.remember_token 替换为 session[:remember_token] = user.remember_token 转移到会话工作正常,但是因为我不再“永久”存储 cookie,所以测试失败.我从第 8 章撤消了我的练习更改,回到 cookie,所有测试都通过了。
    【解决方案3】:

    请检查此Stack Overflow comment。我也遇到了同样的问题,并在 sign_in 测试助手中替换了该行(正如“@Aldo 'xoen' Giambelluca”所提到的那样解决了这个问题。只有尝试并解决了第 8 章中的练习,人们才会面临这个问题。它会有正如@Hoang Pham 指出的那样,如果书中提到那些做过练习的人会面临这个问题,那就更好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      相关资源
      最近更新 更多