1

在 Michael Hartl 的新 Rails Tutorial Book (3.2) 的第 9.2.1 节中,定义了一个测试,以确保如果用户登录,他们不能更新 (PUT) 更改给另一个用户。如果尝试这样做,则应将用户重定向到主页。因为网页不能直接发出 PUT,所以 RSPEC 测试使用:

在 { 放 user_path(wrong_user) } { response.should redirect_to(root_path) } 之前

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

这是此示例应用程序的 github 页面: https ://github.com/treetopvt/sample_app

4

3 回答 3

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
于 2012-03-24T21:43:31.353 回答
0

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

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

于 2012-03-22T18:48:57.077 回答
0

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

于 2012-05-16T08:56:39.023 回答