【问题标题】:how do you test csv file content in Rails?你如何在 Rails 中测试 csv 文件的内容?
【发布时间】:2016-04-19 09:06:24
【问题描述】:

我正在编写一个简单的 CanadaPost 价格运输 API,其中价格以表格格式的 PDF 文档给出(参见 https://www.canadapost.ca/tools/pg/prices/SBParcels-e.pdf 的第 3 页)。

数据被提取成csv文件并导入数据库(表prices有列weightrate_codedate)。模型和控制器非常简单:它们采用 weightrate_codedate 并查询价格表。

我正在尝试创建一套测试来测试该图表中每个价格的存在性和正确性。它必须是通用的和可重用的,因为数据每年都在变化。

我想到了一些想法:

1) 读取用于将数据导入数据库的相同 csv 文件,并创建一个循环所有行和列并测试返回的价格的单个 RSpec 示例。

2) 将 csv 文件转换为 prices 控制器的夹具并测试每个夹具。

我也很难对这些测试进行分类。它们不是单元测试,但它们真的是功能/特性测试吗?它们听起来更像是集成测试,但我不确定 Rails 是否将功能测试与集成测试区分开来。

也许答案很明显,而我没有看到。

【问题讨论】:

  • 我不确定是否有正确的方法可以做到这一点,但是模型和控制器的单元测试太难编写了。有太多的嘲弄。夹具文件也不起作用。它们太大而且太慢。我最终将这些测试作为系统集成测试放入 Postman,并且效果很好。

标签: ruby-on-rails csv testing rspec rspec-rails


【解决方案1】:

程序测试可能是显示错误存在的一种非常有效的方法,但对于显示它们的缺失却是无可救药的 (Edsger Wybe Dijkstra)

首先,我认为您应该假设 CSV 解析器正确地完成了它的工作。

完成此操作后,获取输出 CSV 文件并将其放入您的规范中(fixturesrequireload),然后测试输出是否就是您看到的那个。

如果此 csv 文件的每一行都是正确的(鉴于我在您的链接中所说的,我假设它是一个大行),那么我会得出结论,您的代码有效。我不会费心每年都测试它,除非它能让你对自己的代码感到非常安全。

之后您可能会遇到异常,但不幸的是您的规格无法检测到这一点。它可以简单地确保它适用于今年的数据。

【讨论】:

  • 在阅读了更多内容之后,我不确定将我的预期数据放入夹具中是否可行。夹具保存设置数据,而这是预期数据。大量的预期数据。也许 Rails 之外的环境(如 Selenium)可能是适合此目的的技术。
  • 我想了很多,我意识到我什至没有模型来保存我的灯具数据。我的价格要求只是针对控制器。它没有模型,我不确定为测试目的创建模型是个好主意。
  • 我会将expected 数据(即应该在数据库中插入的内容)放在规范本身中。我不需要将去年的 CSV 数据加载到固定装置中(我个人不使用固定装置),而是加载到您可以从规范中要求的文件中(测试文件中的愚蠢 require 可以在这里解决问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2010-09-23
  • 1970-01-01
  • 2016-10-20
  • 2011-01-05
  • 1970-01-01
  • 2015-03-03
相关资源
最近更新 更多