簡體   English   中英

嘗試使用JSON從Rails API中的params對象中提取數據

[英]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

這給出了錯誤:

預期:“ foobar”得到:“ {\\” {\\\\“ email \\\\”:\\\\“ 7abdiel_roob@smithrau.biz \\\\”,\\\\“ password \\\\”:\\\\“ 12345678 \\\\”} \\“ =>無,\\“動作\\” => \\“創建\\”,\\“控制器\\” => \\“ 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數據進行雙重編碼。

json_data = {email: user.email, password: user.password}
post "api/v1/users/sign_in", json_data, format: :json

RSpec會自動為您將請求主體編碼為JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM