我的 users_controller 中有以下功能,可以从本地磁盘上传 csv 文件并将其中的用户详细信息导出到我的应用程序中。该代码在应用程序中正常工作,但我不确定如何在测试中通过 csv。我的功能如下:
def upload
if request.post?
if (params[:user].nil? || params[:user][:csv].blank?)
flash[:notice] = "Please provide a csv file to upload."; return
end
file = params[:user][:csv].read
CSV.parse(file, headers: true, header_converters: :symbol).each { |row| Cortex::User.create(row.to_hash) }
respond_to do |format|
format.html { redirect_to admin_engine.cortex_users_path }
format.json { head :no_content }
end
else
# Provide upload view
end
end
这是我试图在 rspec 测试中涵盖这一点的尝试。
it "should be a success" do
post "admin/users/upload", :user => @user, :user_csv => fixture_file_upload(Admin::Engine.root.join('spec/dummy/tenants_sample.csv')), :session_token => @auth_token
response.code.should eq("200")
end
当我使用 coverage gem 检查 LOC 覆盖率时,我可以看到测试在退出之前进入了前两个 if 语句。
任何人都得到了关于如何传递这个文件的任何提示,以便函数的其余部分可以读取它。
干杯