2013-10-02 52 views
0

我得到沒有路由匹配rspec用於測試我的控制器中的方法。請求規格文章請求沒有路由匹配錯誤

下面是測試代碼:

let(:csv_file){ fixture_file_upload('files/sample_employee_data.csv', 'text/csv') } 
    describe "#process_csv" do 
     it "should output a valid csv file" do 
     post '/payslips/process_csv', :csv => csv_file, :header => 1 
     puts response 
     end 
    end 

下面是我的routes.rb文件代碼:

PayCalculator::Application.routes.draw do 
    resources :payslips do 
    collection { post :process_csv } 
    end 

    root 'payslips#index' 
end 

下面就是該方法

def process_csv(uploaded_file = params[:files][:csv], headers = params[:files][:headers]) 
    begin 
     rows = CSV_Manager.extract_csv(uploaded_file, headers) 
     rows.each do |row| 
     payslip = Payslip.create(
      :first_name => row[0], 
      :last_name => row[1], 
      :annual_salary => row[2], 
      :superannuation => row[3].to_i, 
      :payment_start_date => row[4] 
      ) 

     redirect_to root_url, notice: payslip.errors.full_messages and return unless payslip.valid? 
     prepare_output(row) 
     end 

     @rows = self.pay_data 
     csv_file = CSV_Manager.prepare_csv(@rows, ["Name", "Pay Period", "Gross Income", "Income Tax", "Net Income", "Superannuation"]) 
     send_data csv_file, :type => 'text/csv; charset=iso-8859-1; header=present', 
          :disposition => "attachment;filename=Payslip #{Date.today.to_s}.csv" 

    rescue 
     redirect_to root_url, notice: "CSV not supplied or invalid format" 
    end 
    end 

當我運行rspec spec/我得到以下錯誤:

Failure/Error: post '/payslips/process_csv', :csv => csv_file, :header => 1 

ActionController::UrlGeneratorError: 
No route matches... 

這是什麼原因導致這個錯誤?

+0

你會發布輸出'rake routes'嗎? –

回答

0

params[:files][:headers]你在哪裏傳遞:header => 1。關鍵是不同的。這不會導致找到可能的路線,但只是爲了糾正。按Rails約定行動如果你要傳遞可選PARAMS在任何方法不具有參數

:請看看:http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_methods.html

以下是方法認定中的例子:

def foo(arg1="Miles", arg2="Coltrane", arg3="Roach") 
    "#{arg1}, #{arg2}, #{arg3}." 
end 
+0

爲什麼downvote?請留下評論。 –

+0

那不是我! –

0

試試這個:

post :process_csv, :files => {:csv => csv_file, :header => 1} 
+0

我得到'NoMethodError:undefined method'[]'爲零:NilClass' –

+0

@PassionateDeveloper所以你的控制器(或你的示例數據)很可能被破壞。這與問題無關。 –

+0

考慮到我的所有其他測試都通過了包括'index'動作在同一個控制器中的情況,它怎麼能被打破? –