在Rails中测试lib /例程(即不是模型或控制器)的方法

时间:2014-12-27 23:28:24

标签: ruby-on-rails ruby unit-testing testing model

我正在开发一个rails应用程序,它可以作为小型组织的目录/电话簿应用程序。

背景

应用程序基本上整合来自多个内部Web API的信息,并将它们存储在本地SQLite3 DB中。该应用程序基本上是一个美化的前端,直接从该DB读取。

每隔X小时,就会安排一个rake任务,将Web API中的信息提取到数据库中。在第一次运行时,数据库显然是空白的,但在后续运行中,它会更新现有数据并在必要时创建任何新记录。查询api并插入数据库的所有逻辑都在lib/update.rb

问题

我应该如何设置上述工作流程的测试?我知道rails非常好support for fixtures。但在这种情况下,我不想将预先配置的数据设置为夹具。我想模拟Web API调用并通过lib/update.rb运行它以确保使用正确的逻辑正确插入它。我还想做几次运行来模拟第一次运行和后续运行并断言正确的行为。我应该将/test/unit/update_test.rb中的所有内容作为单元测试吗?

另外,如何在单元测试和模型测试之间管理数据?我一定会使用夹具用于模型,所以我应该在运行单元测试后清除DB吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

VCR宝石很适合这个。您记录连接,然后可以稍后回复。

  

我应该将/test/unit/update_test.rb中的所有内容作为单元测试吗?

没有。您真正构建的是集成代码,因此最好将测试代码放在./test/integration/(或者./test/functional,如果您愿意的话)

  

另外,如何在单元测试和模型测试之间管理数据?

如果你正在谈论建立复杂的数据模型,工厂会对此有所帮助。

  

我应该在运行单元测试后清除数据库吗?

是。事实上,您应该在每次测试之间清除DB,因为这样可以提供良好的测试隔离。