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
カバレッジgemを使用してLOCカバレッジを確認すると、テストが終了する前に最初の2つのifステートメントに入ることがわかります。
このファイルを関数の残りの部分で読み取れるように渡す方法について、誰かがヒントを得ました。
乾杯