ruby-on-rails - 在 Rails 中测试库/例程(即不是模型或 Controller )的方法

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

我正在开发一个 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 中?

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

谢谢!

最佳答案

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

Should I be putting everything in /test/unit/update_test.rb as a unit test?

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

Also how do I manage data between Unit tests and Model Tests?

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

should I clear the DB after running Unit tests?

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

关于ruby-on-rails - 在 Rails 中测试库/例程(即不是模型或 Controller )的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672418/

相关文章:

ruby - 可以调用 Module 的 instance_method 吗?

c++ - lcov报告中未显示模拟功能的分支覆盖率

c# - C# 中使用 ILogger 进行单元测试静态方法 ILoggerFactory 为 Null

ruby-on-rails - 为什么 ActiveRecord/PostgreSQL 在数据库中找不到我的数据?

ruby-on-rails - 避免在 RSpec 中重新创建主题

ruby-on-rails - Rails ActiveJob - 如何阻止作业在 before_enqueue 中排队

CSS:删除样式后,它仍然显示

ruby-on-rails - 如何在 Ruby 中访问深层嵌套哈希中的值?

ruby - 安装rvm后如何安装系统ruby

unit-testing - 在测试 API 的包装器时,我的单元测试是否应该直接接触 API?