如何 POST rspec rails 中缺少 authenticity_token 请求测试?

How to POST with missing authenticity_token in rspec rails request test?

我正在模拟来自外部服务的请求,该服务没有真实性令牌。如果缺少 skip_before_action :verify_authenticity_token,我希望测试失败。

如何根据 Rspec 请求规范执行此操作?

目前我正在使用 post 如下,但它很高兴被接受。

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

CSRF 保护disabled in test environment。尝试启用它使用:

before do
  ActionController::Base.allow_forgery_protection = true
end

after do
  ActionController::Base.allow_forgery_protection = false
end

禁用 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