RspecでAPIテストするときの注意点です。
integerで送っているつもりがstringになっていた!
RailsでAPIサーバーを作成しているのですが、JSONのリクエストにはDHCというChrome拡張アプリを使ってます。
JSONのPOSTリクエストするときはHeader情報をつけています。これはPOSTリクエストでJSONを選ぶとJSON用?のheaderが自動的についてくれます。

自動的についていたので、Rspecでテストするときにheader情報をつけていなかったら、テストが通りませんでした。
logを見てみるとintegerで送っていたつもりの値がstringに変換されていました。
ちなみにlogを見るときはターミナルでtail -f log/development.log
とかtail -f log/test.log
みたいな感じで叩くとターミナルで随時更新されたlogを見れます。
スマホからAPIを叩くときはheader情報をつけるらしい
どうやらスマホからAPIを叩くときは、header情報をつけてくれるらしいです。つまり、Rspecのテストの際も、DHCで動作確認するときもheader情報をつけましょう!
Rspecのドキュメントにも書いてあった!
Rspecのドキュメントにも書いてありました。header情報をつけるのを忘れないようにしましょう!
require "rails_helper" RSpec.describe "Widget management", :type => :request do it "creates a Widget" do headers = { "ACCEPT" => "application/json", # This is what Rails4 accepts "HTTP_ACCEPT" => "application/json" # This is what Rails 3 accepts } post "/widgets", { :widget => {:name => "My Widget"} }, headers expect(response.content_type).to eq("application/json") expect(response).to have_http_status(:created) end end
require "rails_helper" RSpec.describe "Widget management", :type => :request do it "creates a Widget and redirects to the Widget's page" do headers = { "CONTENT_TYPE" => "application/json" } post "/widgets", '{ "widget": { "name":"My Widget" } }', headers expect(response).to redirect_to(assigns(:widget)) end end
コメントを残す