2012-04-24 55 views
1

我在我的REST Api應用程序中啓動單元測試實現。 我使用versionist gemRails單元測試功能和下劃線模塊

所以,我有一個名爲像這樣的類: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。 我有這樣的錯誤:

沒有路由匹配{:控制器=> 「API/v0_1_0 /測試」:動作=> 「測試」}

當我啓動rake routes,我有:

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

隨着V0__1__0而不是V0_1_0雙下劃線。

我不知道如何解決這個問題。編輯:我添加routes.rb

注:我也張貼在這裏的一個問題:https://github.com/bploetz/versionist/issues/9

+0

你能發佈你的routes.rb嗎? – Domness 2012-04-24 13:34:12

+0

我已經編輯我的文章 – 2012-04-24 13:39:56

回答

0

Rails的功能測試(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 

或者

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

是的,這一行做一個範圍,如: 'scope:module =>「v0__1__0」'。 (cf:https://github.com/bploetz/versionist) – 2012-04-24 13:45:54

+0

我已經更新了答案,看看是否有其他更改。 – Domness 2012-04-24 13:54:05

+0

第二個選項可以運行。但是在gem自述文件中寫道:「如果你想簡單地用下劃線代替點,你需要在傳遞給api_version的模塊名稱中使用兩個下劃線(即__)來解決Rails的變形器中的一個怪癖。」 – 2012-04-24 14:06:34