原因は分かっていないが、rails, grape, jbuilderを利用している際にresponse.statusだけ0になってしまう問題に直面した。
jsonのresponse等は問題無かった。
# grape api
class Api::V1::Order < Grape::API
get "/status", jbuilder: "v1/order/status.jbuilder" do
@status = true
end
end
v1/order/status.jbuilder
json.status @status
order_spec.rb
describe Api::V1::Order, type: :request do
describe '#status' do
subject { get "v1/order/status", header: header }
let(:header) { ... }
it 'true' do
subject
# ここが0で返却される
expect(response.status).to eq 200
# responseのjsonはきちんと返却される
expect(JSON.parse(response.body)[:status]).to be_truthy
end
end
end
他の問題無く動いているコードと比較してみた所、jbuilderでjson.status
という名前を使っている場合のみresponse.statusが0で返却される事がわかった。
なので、jbuilderでstatusという単語を使わないようにして解決。
問題自体は解消したが、jbuilderやgrape等何かしらの予約語に引っかかってダメなのか、rspec側なのか、問題の切り分けが調べても分からなかったのでもやもやしたままである。
statusというよくある単語で問題になるのなら調べたらすぐ出ると思うが...