2012-03-22 41 views
1

在Michael Hartl的新Rails Tutorial Book(3.2)的9.2.1节中,定义了一个测试来确保用户登录后,他们无法将更改(PUT)更改为另一个用户。如果尝试这样做,用户应该被重定向到主页。由于网页不能直接发出的说,RSPEC测试使用:第9章授权测试失败

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

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

这是我为这个示例应用程序的github页: https://github.com/treetopvt/sample_app

回答

1

在第8章中有练习从cookie切换到会话。在我SessionsHelper模块我换过

cookies.permanent[:remember_token] = user.remember_token 

session[:remember_token] = user.remember_token 

移动向会议工作得很好,但因为我已不再“永久”存储的cookie,测试失败。我解开了第8章的练习变更,回到了cookies,并且所有的测试都通过了。现在,有关如何将我的授权测试更改为在使用会话时工作的任何想法?这是我目前的测试:

  describe "as wrong user" do 
      let(:user) { FactoryGirl.create(:user) } 
      let(:wrong_user) { FactoryGirl.create(:user, email:"[email protected]") } 
      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 
+0

作者应该为那些做这个练习的人提及这个案例。真的,我花了数小时才解决它。最后我回到了这个答案。 – 2012-05-01 17:05:43

0

我觉得你有你的章节混淆,9.2.1约为注销用户尝试使用更新的行动和9.2.2中有关记录用户尝试在其他用户上使用更新操作。您可能需要检查您的规格中的before区块,以确保您正在测试正确的方案。

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

+0

你是对的,它是9.2.2。它似乎是一个登录用户不记得的情况。测试之间 – Treetopvt 2012-03-22 19:05:58

+0

在第8章有从饼干切换到会议实乃我SessionsHelper模块我换过 cookies.permanent。[:remember_token] = user.remember_token 与 会话[:remember_token] = user.remember_token 会议的举措运行良好,但由于我不再“永久”存储cookie,测试失败。我解开了第8章的练习变更,回到了cookies,并且所有的测试都通过了。 – Treetopvt 2012-03-22 19:11:52

0

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

相关问题