[Ruby] Rails 4 + Rubocop で HttpPositionalArguments 違反

TL;DR

  • rubocop 0.44.0 以降を Rails 4.x で使うと HttpPositionalArguments になる。
  • rubocop gem の TargetRailsVersion の設定が足りてないためであり、0.48.0 で修正された。

rubocopのチェックが通らない

初めてpost系の request spec を書いた結果、rubocop のチェックが Rails/HttpPositionalArguments: Use keyword arguments instead of positional arguments for http call となり失敗するようになった。どうやら、rubocop 0.44.0 から新たに追加されたチェックらしい。

Class: RuboCop::Cop::Rails::HttpPositionalArguments — Documentation for rubocop (0.44.0)

# bad
get :new, { user_id: 1}

# good
get :new, params: { user_id: 1 }

しかし上記の通りに書き換えると次は rspec が通らなくなった。もう少し調べてみると、Rails 5 からの記法なのに誤検知されるバグということがわかった。

一旦設定をオフにすることで回避。

Rails/HttpPositionalArguments:
    Enabled: false

UPDATE: 0.48.0 で修正されており、現在は rubocop のバージョンをアップグレードすることで対応が可能。