ruby-on-rails 如何在rspec rails请求测试中使用缺失的authenticity_token进行POST?

tktrz96b  于 2022-11-19  发布在  Ruby
关注(0)|答案(2)|浏览(130)

我正在模拟一个来自外部服务的请求,该请求没有真实性令牌。我希望在缺少skip_before_action :verify_authenticity_token的情况下测试失败。
我如何从Rspec请求规范中做到这一点?
目前我使用的post如下,但它是愉快的接受。

post endpoint, my_json_string, {'CONTENT_TYPE' => "application/json"}
axr492tv

axr492tv1#

CSRF保护在测试环境中已禁用。请尝试使用以下命令启用它:

before do
  ActionController::Base.allow_forgery_protection = true
end

after do
  ActionController::Base.allow_forgery_protection = false
end
iyfamqjs

iyfamqjs2#

禁用CSRF保护对我不起作用,所以我创建了这个模块,它使用响应主体来检索真实性令牌:
https://gist.github.com/Rodrigora/440220a2e24bd42b7b0c
然后,我可以测试put/post请求,而无需禁用伪造保护:

before do
  @token = login(create(:user, password: 'password'))
end

it 'tests model creation' do
   expect {
     post_with_token 'path/to/model', model_params, @token
   }.to change(Model, :count).by(1)
end

相关问题