【问题标题】:Approach to testing lib/ routines (i.e. not Models or Controllers) in Rails在 Rails 中测试 lib/ 例程(即不是模型或控制器)的方法
【发布时间】:2014-12-27 23:28:24
【问题描述】:

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

背景

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

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

问题

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

另外,我如何管理单元测试和模型测试之间的数据?我肯定会为模型使用固定装置,所以我应该在运行单元测试后清除数据库吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    VCR gem 非常适合这个。您记录连接,然后可以稍后回复。

    我应该把所有东西都放在 /test/unit/update_test.rb 作为单元测试吗?

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

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

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

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

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

    【讨论】:

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