【发布时间】:2015-07-24 01:31:40
【问题描述】:
使用 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
这给出了错误:
预期:“foobar” 得到:"{\"{\\"email\\":\\"7abdiel_roob@smithrau.biz\\",\\"密码\\":\\"12345678\\"}\"=>无, \"action\"=>\"create\", \"controller\"=>\"api/v1/sessions\"}"
好的很好。我的数据正在到达服务器,服务器将其发回,这就是我想要的。在我的下一步中,我尝试获取电子邮件。我将控制器更改为
class API::V1::SessionsController < Devise::SessionsController
respond_to :json
def create
render text: params[:email]
end
end
我得到了
预期:“foobar” 得到:“”
在我看来,params 哈希使用我在请求中发送的 JSon 数据作为键的名称,而不是实际的值。或者也许这是一个 strong_params 的事情?我已经尝试了很多东西,但似乎无法从 params 对象中提取我想要的数据。
【问题讨论】:
-
这里的问题是您尝试访问 JSON 对象,就好像它是普通参数一样,我建议您解码参数然后正常访问您的电子邮件
-
@Kiloreux,Rails 会自动将 JSON 格式请求的主体解码为 params 哈希。你不应该尝试自己解码——你只是做错了。
标签: ruby-on-rails json ruby-on-rails-4 strong-parameters