Ruby on rails 如何在rspec-rails请求测试中发布丢失的真实性令牌?
我正在模拟来自外部服务的请求,该服务将没有真实性令牌。如果Ruby on rails 如何在rspec-rails请求测试中发布丢失的真实性令牌?,ruby-on-rails,rspec,csrf,authenticity-token,Ruby On Rails,Rspec,Csrf,Authenticity Token,我正在模拟来自外部服务的请求,该服务将没有真实性令牌。如果在\u操作之前跳过\u:验证\u真实性\u令牌丢失,我希望测试失败 如何从Rspec请求规范中执行此操作 目前我正在使用post,如下所示,但它被愉快地接受了 post endpoint, my_json_string, {'CONTENT_TYPE' => "application/json"} CSRF保护。尝试使用以下方法启用它: before do ActionController::Base.allow_forger
在\u操作之前跳过\u:验证\u真实性\u令牌
丢失,我希望测试失败
如何从Rspec请求规范中执行此操作
目前我正在使用post
,如下所示,但它被愉快地接受了
post endpoint, my_json_string, {'CONTENT_TYPE' => "application/json"}
CSRF保护。尝试使用以下方法启用它:
before do
ActionController::Base.allow_forgery_protection = true
end
after do
ActionController::Base.allow_forgery_protection = false
end
禁用CSRF保护对我不起作用。因此,我创建了这个模块,它使用响应主体检索真实性令牌: 然后,我可以在不禁用伪造保护的情况下测试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
对于Rails 4.2.5.1和Rspec 3.4,此技术工作良好。我怀疑这是实现解决方案的正确方法。对于CSRF保护的测试,可能需要:
expect{post endpoint,my_json_string}。若要引发_错误(ActionController::InvalidAuthenticityToken)
。我想我应该检查回复的返回码。另外,行号在master branch上不再有效。使用这样的标签怎么样?@FranklinYu:更新了链接。很好的建议。即使是现在的Rails5(API)也是不错的解决方案。