gpt4 book ai didi

ruby-on-rails - 为 RSpec 和 Rails-API 设置 Content-Type header

转载 作者:行者123 更新时间:2023-12-03 09:27:04 25 4
gpt4 key购买 nike

我正在使用 rails-api gem 来构建 Web 服务并想用 RSpec 测试我的 API。我发出的每个请求,无论使用何种 HTTP 方法,都有 CONTENT_TYPE header 设置为“application/x-www-form-urlencoded”。这不是真正的问题,直到我尝试使用 wrap_parameters在我的 Controller 中,它对 params 哈希没有任何影响:

class ApplicationController < ActionController::API
include ActionController::ParamsWrapper
end

class ProjectsController < ApplicationController
wrap_parameters :project, include: [:name]
# ...
end

This hack不再有效(@request 为零),而且我发现的其他 Stack Overflow 帖子也没有工作。

如果我在 RSpec 测试中提出以下请求:
put "/projects/1.json", {name: 'Updated Project 1'}

并在我的 Controller 中放置一个调试器,我得到:
(rdb:1) p params
{ "name"=>"Updated Project 1",
"action"=>"update",
"controller"=>"projects",
"id"=>"5539bbd9-010c-4cfb-88d3-82dadbc99507",
"format"=>"json"
}

(rdb:1) p request.content_type
"application/x-www-form-urlencoded"

我期待在 params 散列中看到这样的东西(注意添加了项目键):
{ "name"=>"Updated Project 1",
"action"=>"update",
"controller"=>"projects",
"id"=>"5539bbd9-010c-4cfb-88d3-82dadbc99507",
"format"=>"json",
"project" => {"name" => "Updated Project 1"}
}

是否可以仅使用 RSpec 设置内容类型 header ?或者我是否必须使用机架/测试才能实现此功能?

最佳答案

很多挫折和变化,这对我有用。
Rails 3.2.12 Rspec 2.10

 @request.env["HTTP_ACCEPT"] = "application/json"
@request.env["CONTENT_TYPE"] = "application/json"
put :update, :id => 1, "email" => "bing@test.com"

wrap_parameters 似乎以这种方式声明
wrap_parameters User, format: :json

用于 User模型

关于ruby-on-rails - 为 RSpec 和 Rails-API 设置 Content-Type header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com