Trying to pull data from params object in Rails API using JSON
使用Rspec,我正在尝试建立一个测试一些基本http请求的规范。我在某个地方犯了一个菜鸟错误,需要帮助才能找到它。
我故意使规范以胡扯的期望失败,因此错误消息将告诉我我要得到的内容-一旦我弄清楚了,我将纠正期望:
1 2 3 4 | 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路由到以下控制器:
1 2 3 4 5 6 | class API::V1::SessionsController < Devise::SessionsController respond_to :json def create render text: params end end |
这给出了错误:
expected:"foobar"
got:"{"{\\"email\\":\\"[email protected]\\",\\"password\\":\\"12345678\\"}"=>nil,
"action"=>"create", "controller"=>"api/v1/sessions"}"
好的。我的数据正在到达服务器,服务器将其发送回去,这就是我想要的。在下一步中,我尝试获取电子邮件。我将控制器更改为
1 2 3 4 5 6 | 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数据进行双重编码。
1 2 | json_data = {email: user.email, password: user.password} post"api/v1/users/sign_in", json_data, format: :json |
RSpec会自动为您将请求正文编码为JSON。