2013-10-02 78 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'动作在同一个控制器中的情况,它怎么能被打破? –