0

rails-rpec ルート スペックを使用して、さまざまなユーザー エージェントに基づいてさまざまなルーティングをテストしようとしていますが、スタブする正しいメソッドまたはオブジェクトが見つかりません。

私の方法は次のようになります。

require "spec_helper"

describe "articles routing" do
  describe "/articles/#slug" do

    it "routes to Articles#show" do
      get("/articles/fancy-slug").should route_to(controller: "articles",
                                                    action:     "show",
                                                    id:         "fancy-slug")
    end

    describe "when you have an iphone user agent" do
      before(:each) do
        # SOMETHING MAGICAL HAPPENS ALONG THE LINES OF THE LINE BELOW
        # request.user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25"
      end

      it "routes to Mobile::Articles#show" do
        expect(get: "/articles/fancy-slug").to route_to(controller: "mobile_articles",
                                                      action:     "show",
                                                      id:         "fancy-slug")
      end
    end

  end
end

しかし、私の人生では、リクエストやコントローラーなどをスタブする方法がわかりません。get利用可能なドキュメントのほとんどは、構文の古い/時代遅れのバージョンを参照しているようです。

4

1 に答える 1

0

これが機能するかどうかはわかりませんが、次のことを試してみてください。

のソースを見るとRouteToMatcher、コントローラー/アクションのペア (ハッシュまたはcontroller#action形式で指定) と、それらと共に指定されたその他のパラメーターを解析してから、 に委任しActionDispatch::Assertions::RoutingAssertions#assert_recognizesます。requestしかし、そのメソッドは、引数として に渡したパラメータからオブジェクトを構築しますroute_to。そのため、仕様からリクエスト オブジェクトにアクセスする簡単な方法はありません。ただし、このダミーのリクエストを作成するには、

ActionController::TestRequest.new

だからあなたは試すかもしれません

ActionController::TestRequest.any_instance.stub(:user_agent).
  and_return "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25"
于 2013-07-31T19:34:17.387 に答える