2016-04-19 30 views
0

我正在编写一个简单的CanadaPost价格运输API,其中价格以PDF格式在表格格式中给出(请参阅https://www.canadapost.ca/tools/pg/prices/SBParcels-e.pdf的第3页)。如何测试Rails中的csv文件内容?

的数据被提取到CSV文件,并导入到数据库中(表价格具有列重量rate_code日期)。该模型和控制器非常简单:他们需要重量,rate_code日期并查询价格表。

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

我想到的一些想法:

1)读了用来将数据导入到数据库中,并创建循环周围所有的行和列测试返回一个RSpec的例子相同的CSV文件价钱。

2)将csv文件转换为灯具的价格价格控制器和测试每个灯具。

我也很难分类这些测试。他们不是单元测试,但他们真的功能/功能测试?它们听起来更像集成测试,但我不确定Rails是否将集成测试的功能测试与众不同。

也许答案是显而易见的,我没有看到它。

+0

我不确定是否有正确的方法来做到这一点,但模型和控制器的单元测试太难以书写。涉及太多的嘲弄。夹具文件也没有工作。他们太大,太慢。我最终将这些测试作为系统集成测试加入到Postman中,并且运行良好。 –

回答

0

程序测试可以显示错误的存在非常有效的方法,但是是绝望不足以显示其缺席(Edsger Wybe的Dijkstra)

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

一旦你这样做,获得输出CSV文件,并把它放在你的规格(fixturesrequire,),然后测试输出是你看到的。

如果这个csv文件的每一行都是正确的(我假设它是一个很大的给出我在你的链接中说的),那么我会断定你的代码有效。除非它会让你对你的代码感到非常安全,否则我不会每年都去测试它。

之后您可能会发现异常,但不幸的是,您的规格无法检测到该异常。它可以简单地确保它对今年的数据非常有用。

+0

阅读更多内容后,我不确定将我的预期数据放在灯具中是否可行。夹具保存设置数据,而这是预期的数据。吨和吨的预期数据。也许Rails之外的环境(比如Selenium)可能是适合这一点的技术。 –

+0

我想到了一些,我意识到我甚至没有一个模型来保存我的灯具数据。我的价格请求只适用于控制器。没有模型,我不确定为测试目的创建模型是一个好主意。 –

+0

我会在规格本身中放入'预期'数据(即应插入数据库中的内容)。我不需要在装置中加载去年的CSV数据(我个人不使用装置),而是在你可以从你的规格中要求的文件中(在你的测试文件中一个哑巴'require'会在这里执行这个技巧) – born4new