我有简单的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)。
感谢您的帮助。
答案 0 :(得分: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
希望一切都清楚!