【问题标题】:Passing a CSV file to rspec as a param将 CSV 文件作为参数传递给 rspec
【发布时间】:2012-06-14 15:19:06
【问题描述】:

我的 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 语句。

任何人都得到了关于如何传递这个文件以便函数的其余部分可以读取它的任何提示。

干杯

【问题讨论】:

    标签: ruby-on-rails-3 file-upload csv controller rspec2


    【解决方案1】:

    恕我直言,测试 CSV 组合或解析不属于您当前的测试。最终,所有此类测试都会测试 CSV 模块或 CSV 文件的有效性——这是一个脆弱的测试,并且对您的应用程序的了解很少。

    更好的测试实践是对模型进行测试,以确保:

    1. 格式正确的 CSV 将以您期望的方式导入。
    2. 格式错误的 CSV 文件会针对您的应用程序进行适当处理。

    控制器应该只存根或模拟 CSV 解析,因为它与响应代码测试无关,而且逻辑无论如何确实属于模型。 YMMV。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多