1

REST Api アプリケーションで単体テストの実装を開始します。versionist gemを使用しています。

だから、私はこのような名前のクラスを持っています: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。私はこのエラーがあります:

{:controller="api/v0_1_0/test", :action="test"} に一致するルートがありません

そして、私が起動するrake routesと、私は持っています:

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

V0__1__0と notの二重下線付きV0_1_0

この問題を解決する方法がわかりません。

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

注: ここにも問題を投稿しました: https://github.com/bploetz/versionist/issues/9

4

2 に答える 2

0

あなたが提供したリンクを見て、このようなことができますか?

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

または

get "/test" => "test#test", :controller => "api/V0_1_0/test"
于 2012-04-24T13:41:05.733 に答える
0

Rails の機能テスト (ActionController::TestCase) は、コントローラーのアクション メソッドを分離してテストするためのものです。完全な 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 )。

于 2012-04-27T22:44:59.803 に答える