2014-01-21 38 views
0

我正在用Rails 4.0構建RESTful JSON API並將mongoid用作我的數據庫。我正在使用RSpec測試我的一個控制器的銷燬操作。但是,當我運行我的測試時,我收到ActionController :: UrlGenerationError:因爲Rails無法找到相應的路由。奇怪的是我的destroy動作在我的routes.rb文件中明確定義,並且我的其他控制器在同一資源內的動作正常工作。在Rails API控制器中測試銷燬行爲

 describe "DELETE 'delete credit cards'" do 
    before do 
     @credit = CreditCard.new(cc_last4: Random.rand(1234)) 
    end 

    it "should return a successful json response" do 
     params = {comicbook_uid: @user.comicbook_uid.to_s , 
        notebook_token: @user.comicbook_token, 
        cc_id: @credit.id, format: :json } 

     delete :destroy, params 

     body_hash = JSON.parse response.body 

     expect(body_hash["success"]).to eql true 
    end 

是被我的終端產生的錯誤是這樣的:

Failure/Error: delete :destroy, params 
    ActionController::UrlGenerationError: 

    No route matches {:comicbook_uid=>"52decf924761625bdf000000", :comicbook_token=>"sfsakjhfk",  
       :cc_id=>BSON::ObjectId('52decf924761625bdf020000'), 
       :format=>:json, :controller=>"credit_cards", 
       :action=>"destroy"} 

我的信用卡資源路線是這樣的:

resources :credit_cards, only: [:create, :index, :destroy], 
:defaults => { :format => 'json'} 

預先感謝您,希望能儘快幫助我!

回答

0

您未通過id屬性,這是您實際需要的唯一參數。此外,由於您使用CreditCard.new(...)來創建@credit對象,因此在將其持久保存到數據庫之前,它實際上不會有ID。

替換:

it "should return a successful json response" do 
    params = {comicbook_uid: @user.comicbook_uid.to_s , 
       notebook_token: @user.comicbook_token, 
       cc_id: @credit.id, format: :json } 

有:

it "should return a successful json response" do 
    params = {id: @credit.id, format: :json } 

,並確保持續的信用卡式(或將其銷燬設定的模擬期望)。

+0

我在哪裏需要傳遞id屬性?查看我的控制器規範,我在創建用戶的文件頂部有一個before塊。因此,此處之前的街區是毫無道理的。我知道我需要傳遞id屬性,但我無能爲力,無法傳遞它。感謝您的幫助。 – GabeLafontant

+0

你是在銷燬用戶還是信用卡?這似乎是你需要先創建一個信用卡,然後再試圖銷燬它... – PinnyM