尝试使用 JSON 从 Rails API 中的参数对象中提取数据
Trying to pull data from params object in Rails API using JSON
使用 Rspec,我正在尝试构建一个规范来测试一些基本的 http 请求。我在某个地方犯了一个菜鸟错误,需要帮助找到它。
我故意让规范因毫无意义的期望而失败,因此错误消息会告诉我我得到了什么——一旦我弄清楚了,我就会纠正期望:
user = create(:member)
json_data = {email: user.email, password: user.password}.to_json
post "api/v1/users/sign_in", json_data, format: :json
expect(last_response.body).to eq "foobar"
api/v1/users/sign_in 路由到以下控制器:
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params
end
end
这给出了错误:
expected: "foobar"
got: "{\"{\"email\":\"7abdiel_roob@smithrau.biz\",\"password\":\"12345678\"}\"=>nil,
\"action\"=>\"create\", \"controller\"=>\"api/v1/sessions\"}"
很好。我的数据正在到达服务器,服务器将其发回,这就是我想要的。在我的下一步中,我尝试获取电子邮件。我将控制器更改为
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params[:email]
end
end
我得到
expected: "foobar"
got: " "
我认为 params 哈希使用我在请求中发送的 JSOn 数据作为键名,而不是实际值。或者这可能是 strong_params 的事情?我已经尝试了很多东西,但似乎无法从 params 对象中提取我想要的数据。
发生的事情是您对您在规范中发送的 JSON 数据进行了双重编码。
json_data = {email: user.email, password: user.password}
post "api/v1/users/sign_in", json_data, format: :json
RSpec 会自动为您将请求正文编码为 JSON。
使用 Rspec,我正在尝试构建一个规范来测试一些基本的 http 请求。我在某个地方犯了一个菜鸟错误,需要帮助找到它。
我故意让规范因毫无意义的期望而失败,因此错误消息会告诉我我得到了什么——一旦我弄清楚了,我就会纠正期望:
user = create(:member)
json_data = {email: user.email, password: user.password}.to_json
post "api/v1/users/sign_in", json_data, format: :json
expect(last_response.body).to eq "foobar"
api/v1/users/sign_in 路由到以下控制器:
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params
end
end
这给出了错误:
expected: "foobar" got: "{\"{\"email\":\"7abdiel_roob@smithrau.biz\",\"password\":\"12345678\"}\"=>nil, \"action\"=>\"create\", \"controller\"=>\"api/v1/sessions\"}"
很好。我的数据正在到达服务器,服务器将其发回,这就是我想要的。在我的下一步中,我尝试获取电子邮件。我将控制器更改为
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params[:email]
end
end
我得到
expected: "foobar" got: " "
我认为 params 哈希使用我在请求中发送的 JSOn 数据作为键名,而不是实际值。或者这可能是 strong_params 的事情?我已经尝试了很多东西,但似乎无法从 params 对象中提取我想要的数据。
发生的事情是您对您在规范中发送的 JSON 数据进行了双重编码。
json_data = {email: user.email, password: user.password}
post "api/v1/users/sign_in", json_data, format: :json
RSpec 会自动为您将请求正文编码为 JSON。