Edited at

RspecでCSVファイルアップロードを行っているコントローラのテストを行いたい場合

More than 3 years have passed since last update.

CSVファイルのアップロードを行う機能のテストコードをrspecで行いたい場合、view側がこんなコードだとすると


<%= form_tag(upload_import_file_path, {:multipart => true }) do %>
<p>
ファイル
<br>
<%= file_field_tag :csv_file %>
</p>
<br>
<p><%= submit_tag "アップロード" %></p>
<% end %>

コントローラのテストは次の用なコードを書く。


describe "csvファイルのアップロード時" do
let(:csv) { "upload_data.csv" }
before(:each) do
@bulk_params = {csv_file: fixture_file_upload(csv, "text/csv")}
# file_field_tag に設定したシンボルと合わせる。ここではcsv_file
end

it "レコードの追加に成功する" do
post :upload_import_file, @bulk_params
expect(InpData.count).to eq xxx
end
end

spec/fixtures/の下にテストで使うcsvファイルを設置すればOK。

fixture_file_uploadに渡すファイルパスは、spec/fixtures/がルートとなる相対パスで。