19

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

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

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

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

2 回答 2

54

测试环境中禁用CSRF 保护。尝试启用它使用:

before do
  ActionController::Base.allow_forgery_protection = true
end

after do
  ActionController::Base.allow_forgery_protection = false
end
于 2015-03-09T16:44:23.220 回答
2

禁用 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
于 2015-09-19T21:56:09.593 回答