コンテンツにスキップ

rigor-rspec-rails

引数が静的に検査可能なrspec-rails振る舞い系マッチャーを検証します ── 現在はhave_http_status(int_or_symbol)で、範囲外のステータスコードとタイポされたステータスシンボルをフラグします。これはrigor-rspecの振る舞い系の兄弟分です。rigor-rspecがbe_a / be_nil / eq(literal)のようなマッチャーを通じてローカル変数の型をナローイングするのに対し、rigor-rspec-railsは何もナローイングせずにマッチャー引数に対してドメインdiagnosticを出します。両者は独立して有効化され、合成されます。

これはrigortypeにバンドルされて配布されます。plugins:の下で(通常はrigor-rspecと並べて)有効化します。

plugins:
- rigor-rspec
- rigor-rspec-rails
RSpec.describe HomeController do
it "returns 200" do
expect(response).to have_http_status(200) # OK
expect(response).to have_http_status(:ok) # OK
expect(response).to have_http_status(:success) # OK(Rails 2xxグループエイリアス)
expect(response).to have_http_status(99) # 警告: 範囲外
expect(response).to have_http_status(:succes) # 警告: 未知のシンボル(タイポ)
end
end
ルール重大度発火条件
plugin.rspec-rails.have_http_status.out-of-rangewarning整数引数が100..599の範囲外である
plugin.rspec-rails.have_http_status.unknown-symbolwarningシンボル引数が既知のRackステータスコードでもRailsステータスグループエイリアスでもない(did-you-mean付き)

受理されるステータスシンボルは、vendoringされたスナップショットではなく、解析時に読み取られる本物のRack::Utils::SYMBOL_TO_STATUS_CODEhave_http_status自身が使うのと同じ権威)に由来します ── そのため新たに追加されたRackシンボルがタイポと誤認されることはありません(ADR-39)。Rackをロードできない場合、プラグインはどのシンボルもフラグすることを控えます(カバレッジは縮小しますが、偽陽性は決して出しません)。8つのRailsステータスグループエイリアス(:success:successful:missing:redirect:error:client_error:server_error:informational)は、小さく安定した定数集合です。検査されるのはリテラルの整数 / シンボル引数のみで、文字列・変数・計算式は素通りします。

このプラグインに設定ノブはありません。

  • have_http_statusのみ。他のrspec-railsマッチャーは、プラグイン間の調整待ちのキューに入っています。render_template(rigor-actionpackのレンダーターゲット検証と重複)、route_to / redirect_to / be_routable(rigor-rails-routesのテーブルが必要)、have_enqueued_job / have_received(エンジンの定数 / undefined-methodルールと重複)。
  • リテラル引数のみ ── 変数やメソッド呼び出し経由で渡されたステータスは静的に検査できないため、黙って受理されます。

マッチャーの認識器(recognizer)、Rackテーブルのルックアップ、このプラグインが行使する契約(contract)のサーフェス(surface)については、プラグインのREADMEにあります。プラグインの書き方についてはexamples/rigor-plugin-authorスキルを参照してください。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.