当前位置:  开发笔记 > 编程语言 > 正文

Rails,如何测试缺少参数的400个响应

如何解决《Rails,如何测试缺少参数的400个响应》经验,为你挑选了0个好方法。

我正在使用Rails 4.2.5,并且正在尝试测试来自控制器的预期400响应,以防请求格式错误。参数验证逻辑由处理strong_parameters

上下文

在我的控制器中,我有:

def user_params
  params.require(:user).permit(:foo, :bar, :baz)
end

user_params在POST请求中引用,Accept并且ContentType标头设置为application/json

在中development,不带user参数的POST 将引发ActionController::ParameterMissing异常。
如果我在environments/development.rb文件中设置了此设置:

Rails.application.configure do
  config.consider_all_requests_local = false
end

Rails的行为类似于in production并返回简单的400响应,而不是调试页面。大。

问题

尽管(rspec-rails ~> 3.4),我在控制器测试中做同样的事情有麻烦。

具体来说,这将通过:

expect {
  post :action, malformed_params
}.to raise_error(ActionController::ParameterMissing)

但这不是因为引发异常:

post :action, malformed_params
expect(response.status).to eql 400

我已经尝试过将其consider_all_requests_local用于测试环境,但无济于事。

有什么办法吗?对此有一个旧的答案,但是它没有帮助(甚至询问者也认为它没有用)。

编辑:

如评论中所要求的,这是控制器规范中的参数:

let(:user_data) do
  { foo: "foo", bar: "bar", baz: "baz" }
end

let(:good_params) do
  {
    some_id: SecureRandom.uuid,
    user: user_data
  }
end

let(:malformed_params) do
  { some_id: SecureRandom.uuid }.merge(user_data)
end

let(:incomplete_params) do
  { some_id: SecureRandom.uuid }
end

good_params幸福之路而工作。当我要测试400时,两者malformed_paramsincomplete_params不起作用:两者都会引发异常并导致测试失败。

我已经验证了POST到运行中的服务器时,相同的参数有效负载将起作用(在中development,但如上所述对配置进行了调整)。

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有