【问题标题】:How to check if response is a file?如何检查响应是否为文件?
【发布时间】:2013-02-04 20:40:22
【问题描述】:

如何测试 Rails 中控制器操作的响应是否为文件? (机架测试或水豚)

我应该使用单元测试来做吗?

场景很简单:我必须测试从数据库中导出的用户是否与操作生成的 .csv 中包含的相同。

【问题讨论】:

    标签: ruby-on-rails tdd testunit minitest rack-test


    【解决方案1】:

    您不需要机架测试或 Capybara 来执行此操作。默认的测试基础架构就是您所需要的。只需检查 Content-Type 是否为 CSV:

    test "returns a CSV file" do
      get :index, format: :csv
      assert_response :success
      assert_equal "text/csv", response.content_type
    end
    

    如果您想更进一步,可以解析返回的 CSV 以确保其有效并测试返回的值:

    test "returns a valid CSV file and data" do
      get :index, format: :csv
      assert_response :success
      assert_equal "text/csv", response.content_type
    
      csv = CSV.parse response.body # Let raise if invalid CSV
      assert csv
      assert_equal 6, csv.size
      assert_equal "Joe Smith", csv[3][4]
    end
    

    【讨论】:

    • 弃用警告:Rails 6.1 将不加修改地返回 Content-Type 标头。如果您只想要 MIME 类型,请改用#media_type
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2021-03-21
    相关资源
    最近更新 更多