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...

このエラーの原因となっているのは、ここで何が間違っている可能性がありますか?

4

2 に答える 2

0

params[:files][:headers]あなたが通過している場所:header => 1。キーが違います。これにより、ルートが見つからない可能性はなく、修正のためだけに発生します。Railsの慣例によると、アクションにはパラメーターがありません

任意のメソッドでオプションのパラメーターを渡す場合: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_methods.htmlをご覧ください。

メソッド定義の例を次に示します。

def foo(arg1="Miles", arg2="Coltrane", arg3="Roach")
  "#{arg1}, #{arg2}, #{arg3}."
end
于 2013-10-02T13:05:50.917 に答える
0

これを試して:

post :process_csv, :files => {:csv => csv_file, :header => 1}
于 2013-10-02T12:31:09.483 に答える