2012-04-24 9 views
1

REST APIアプリケーションでユニットテスト実装を開始します。 私はversionist gemを使用します。Railsユニットテスト機能とアンダースコアモジュール

だから、私はこのような名前のクラスがあります:Api::V0_1_0::TestController

class Api::V0_1_0::TestController < Api::V0_1_0::BaseController 

    def test 
    respond_with({ 
     :message => "done" 
    }) 
    end 

end 

routes.rb(すべてのルートなしで、ちょうど必要):

MyApp::Application.routes.draw do 

    # ----------------------------------------------------------------------------------------------------------------------------------------- 
    # ApiVersions 
    # 
    scope :module => "api", 
     :defaults => {:format => "json"} do 

    # --------------------------------------------------------------------------------------------------- 
    # V0.1.0 
    # Default version 
    # 
    api_version :module => "V0__1__0", 
       :header => "X-Version", :value => "0.1.0" do 

     # Test controller 
     get "/test" => "test#test" 
    end 
    # --------------------------------------------------------------------------------------------------- 

    # --------------------------------------------------------------------------------------------------- 
    # V0.1.1 
    # Default version 
    # 
    api_version :module => "V0__1__1", 
       :header => "X-Version", :value => "0.1.1" do 

     # Test Controller 
     get "/test" => "test#test" 

    end 
    # ----------------------------------------------------------------------------------------------------------------------------------------- 



    # ----------------------------------------------------------------------------------------------------------------------------------------- 
    # ActiveAdmin routes 
    # 
    ActiveAdmin.routes(self) 
    devise_for :admin_users, ActiveAdmin::Devise.config 
    # ----------------------------------------------------------------------------------------------------------------------------------------- 


end 

機能テストファイル:

class Api::V0_1_0::TestControllerTest < ActionController::TestCase 

    test "should get test" do 
    get :test 
    assert_response :success 
    end 
end 

rake test:functionalsを起動したとき。

Noルートマッチ: 私はこのエラー有し{:コントローラ=> "API/v0_1_0 /テスト":アクション=> "テスト"}

およびIはrake routesを起動したとき、私は:V0__1__0ないV0_1_0のための二重のアンダースコアで

test GET /test(.:format) {:format=>"json", :controller=>"api/V0__1__0/test", :action=>"test"} 

この問題の解決方法はわかりません。

編集:私はroutes.rbを追加しました。

注:このような何かを行うことができ、あなたが提供されたリンクを見てみるとhttps://github.com/bploetz/versionist/issues/9

+0

routes.rbを投稿できますか? – Domness

+0

私の投稿を編集しました –

答えて

0
get "/test" => "test#test", :controller => "api/V0_1_0/test" 

機能テスト(ActionController ::テストケース)が単独でテストコントローラのアクションメソッドのためのものであるレール。彼らは完全なRailsスタック、特にRailsディスパッチャーのコードパスを通らず、バージョンパスがそれを実行するためにフックします。

HTTPヘッダー戦略に依存するバージョン管理APIルートをテストする場合は、統合テスト(ActionDispatch :: IntegrationTest)を使用するか、rspecを使用している場合は仕様をリクエストしてください。

require 'test_helper' 

class Api::V0_1_0::TestControllerTest < ActionDispatch::IntegrationTest 

    test "should get test" do 
    get '/test', nil, {"X-Version" => "0.1.0"} 
    assert_response :success 
    assert_equal @response.body, "0.1.0" 
    end 
end 

Versionist 0.2.0は、それの発電機(https://github.com/bploetz/versionist/issues/11)によって作成されたコンポーネントに統合テスト/要求仕様を追加しました。

0

:私もここに問題を投稿しましたか?

api_version :module => "V0__1__0", 
      :path => "/V0_1_0", 
      :header => "X-Version", :value => "0.1.0" do 

または

+0

はい、この行はスコープを行います: 'scope:module =>" v0__1__0 "'。 (cf:https://github.com/bploetz/versionist) –

+0

他のものが変更できるかどうかを確認するために答えを更新しました。 – Domness

+0

2番目のオプションを実行できます。しかし、宝石のREADMEには次のように書かれています。「単にドットをアンダースコアに置き換えたい場合は、api_versionに渡されたモジュール名に2つのアンダースコア(つまり__)を使用して、Railsのインフレクターのクルックを回避する必要があります。 –

関連する問題