3

作業中のアプリにルートがあり、次のようになります...

  match ":place_id/:id", :controller => "companies", :action => "show", :place_id => /\S{2}/

したがって、ブラウザでこの URL に移動できます。

mylocalmachine/gb/some-company

サーバーログでは、すべて良好です。

Started GET "/gb/some-company" for 127.0.0.1 at 2013-04-30 17:44:52 +0100
Processing by CompaniesController#show as HTML
  Parameters: {"place_id"=>"gb", "id"=>"some-company"}

しかし、コントローラーの仕様では、このルートとその動作をテストしようとしています。

get "/gb/some-company"

しかし、私はこのエラーが発生します

ActionController::RoutingError: No route matches {:controller=>"companies", :action=>"gb/some-comapny"}

注: このルートを routes.rb ファイルの先頭に配置して、テストが機能するかどうかを確認しましたが、うまくいきませんでした。また、他のすべての仕様は合格です。私が間違っている可能性のあるアイデアをいただければ幸いです。

更新:これはテストの様子です...

params_from(:get, "/gb/some-company").should == {:controller => "companies", :action => "show", :country_id => "gb", :id => "some-company"}
4

1 に答える 1

3

これは、RSpec コントローラー テストが、記述されたコントローラーのアクション名に直接リクエストを一致させるためです。

あなたのテストはおそらく次のようになります

describe CompaniesController do
  it "does something" do
    get "/gb/some-company"
  end
end

に置き換えるget "/gb/some-company"

get :show, {place_id: 'gb', id: 'some-company'}

きっとあなたの思い通りに動くはずです。

実際に RSpec で "/gb/some-company" としてリクエストしたい場合は、リクエスト スペックを参照してください。

彼らはあなたがこのようなことをすることを可能にします

describe "Company stuff" do
  it "is awesome"
    get "/gb/some-company"
  end
end

アップデート

更新された質問に基づいて、古いバージョンのRSpecを使用していると思います。params_fromRSpec 2 には現在メソッドがありません

いずれにせよ、あなたが望むものに基づいて、あなたは使いたいですrouting specs

必要な仕様は、RSpec 2 では次のようになります。

describe "Company matching" do
  it "matches the routes" do
    expect(:get => '/gb/some-company').to route_to(:controller => "companies", :action => "show", :country_id => "gb", :id => "some-company")
  end
end

ドキュメントが見つからないように見えるため、古いバージョンのRSpecでどのように見えるかは100%わかりません。

于 2013-04-30T17:27:02.960 に答える