testing - 测试 Rails 设计 TestHelpers: sign_in正在处理get但不是 post

  显示原文与译文双语对照的内容

我在一个使用设计的Rails 网站上进行功能测试,并且我遇到了一个奇怪的问题。 我需要找出如何模拟登录,在一个小的搜索之后,我发现了 ,这个问题告诉我关于和sign_in函数。 但奇怪的是,它在一些但不是所有的测试中都能正常工作。 以下是我的几个测试:


include Devise::TestHelpers



setup do


 @game = games(:game_one)


 @user = users(:one)


 sign_in(@user)


end



# This test passes


test"should get index" do


 get :index


 assert_response :success


 assert_not_nil assigns(:games)


end



# This test fails; the post redirects to/users/sign_in


# as if accessed without logging in


test"should create game" do


 assert_difference('Game.count') do


 post :create, game: { name: @game.name }


 end



 assert_redirected_to game_path(assigns(:game))


end



控制器本身看起来像这样:


class GamesController <ApplicationController


 before_filter :authenticate_user!



 # Some mostly-autogenerated CRUD


end



我可以说,正在运行的测试和考试的测试之间的主要区别是前者使用 get 和后者 post 。 是有意义的? 我怎么修复它?

编辑:这与设计自述提到的"作用域"有关? 它并没有真正解释什么意思,但它似乎是相关的。

时间: 原作者:

感谢farleyknight的评论,我发现它在抱怨CSRF令牌真实性。 在那里,这个问题的答案是。 我把它添加到了我的程序中:


skip_before_filter :verify_authenticity_token if Rails.env.test?



可以能有一种方法可以实际发送有效的sdm标记作为测试的一部分,这可以能是一个更好的解决方案。

原作者:
...