1

簡単な CSV アップロードがあります。

モデル:

def import_links(file)
  CSV.foreach(file.path) do |row|
    links.create(Hash[%w(url text description).zip row])
  end 
end

形:

<%= form_tag import_links_board_path(@board), multipart: true do %>
  <%= file_field_tag :file %><br/>
  <%= submit_tag "Import" %>
<% end %>

コントローラ:

def import_links
  @board = Board.find(params[:id])
  @board.import_links(params[:file])
  redirect_to @board
end

このモデルの #import_links メソッドをテストしたいので、おそらく次のようなものが必要です。

before :each do
  @file = ...
end

残念ながら、このファイルを生成する方法がわかりません (手動で、または FactoryGirl を使用する方がよいでしょう)。

手伝ってくれてありがとう。

4

1 に答える 1

0

rspec での統合テストにこのヘルパーを使用しました。

module PathHelpers
  def file_path(name)
    File.join("spec", "support", "files", name)
  end
end

RSpec.configuration.include PathHelpers

次に、テスト ファイルを に配置するspec/support/filesと、テスト内で使用できます。

scenario "create new estimate" do
  visit new_estimate_path

  fill_in 'Title', with: 'Cool estimate'
  attach_file 'CSV', file_path('estimate_items.csv')

  expect { click_button "Create estimate" }.to change(Estimate, :count).by(1)
end

FactoryGirl ファクトリーの場合、次のようなものがあります。

FactoryGirl.define do
  factory :estimate_upload do
    estimate
    excel File.open(File.join(Rails.root, 'spec', 'support', 'files', 'estimate_items.csv'))
  end
end

すべてが明確であることを願っています!

于 2013-06-27T18:25:36.787 に答える