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