在Michael Hartl的新Rails教程书(3.2)的9.2.1节中,定义了一个测试,以确保如果一个用户登录,他们不能更新(放置)对另一个用户的更改。如果尝试这样做,则应将用户重定向到主页。因为网页不能直接发出PUT,所以RSPEC测试使用:
在{ put user_path(wrong_user) }{ response.should redirect_to(root_path) }之前
此测试用例失败,并查看它似乎正在退出的日志,因为UserController中的第一个before_filter (signed_in_user)正在重定向到登录页面。
这是我的github示例应用程序的页面:https://github.com/treetopvt/sample_app
发布于 2012-03-25 05:43:31
在第8章中,有一个从cookies切换到会话的练习。在我的SessionsHelper模块中
cookies.permanent[:remember_token] = user.remember_token使用
session[:remember_token] = user.remember_token迁移到sessions运行良好,但因为我不再“永久”存储cookie,所以测试失败。我撤销了第8章中的练习更改,回到cookies,所有测试都通过了。现在,关于如何在使用会话时更改授权测试以使其正常工作,您有什么想法吗?这是我目前的测试:
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-23 02:48:57
我想你搞混了,9.2.1是关于注销的用户尝试使用更新操作,9.2.2是关于登录的用户试图对其他用户使用更新操作。您可能需要检查规范中的before块,以确保您测试的是正确的场景。
例如:在9.2.2中使用before { sign_in user }来设置一个登录的用户,然后在尝试更新另一个用户的配置文件时,该用户将被重定向到根路径。看起来您根本没有登录的用户,所以身份验证筛选器停止流并重定向到登录页面。
发布于 2012-05-16 16:56:39
请检查此Stack Overflow comment。我也遇到了同样的问题,并替换了sign_in测试助手中的这一行(正如"@Aldo 'xoen‘Giambelluca“所提到的那样)解决了这个问题。只有当一个人尝试并解决了第8章中的练习时,才会面临这个问题。正如@Hoang Pham所指出的,如果书中提到那些做练习的人将面临这个问题,那就更好了。
https://stackoverflow.com/questions/9828393
复制相似问题