ruby-on-rails - 在 Rails 中自动测试流程

标签 ruby-on-rails ruby rspec cucumber bdd

我正在构建一个教育服务,这是一个相当繁重的应用程序。我有很多用户操作会触发各种操作,有些是现在的,有些是 future 的。

例如,当学生完成一天的类(class)时,应该发生以下情况:

  • 更新他的用户模块记录的进度计数
  • 检查他是否完成了一个特定的模块并让他进入下一个模块(这反过来会触发更多操作)
  • 触发当前电子邮件给其他用户
  • 向自己发送 FUTURE 电子邮件(正在进行的类(class)计划)
  • 创建其他对象的范围(由教师对待办事项进行评分)
  • 任何其他特殊事件

所有这些触发器都内置在各种对象的观察者中,并使用 Sidekiq 延迟执行。

让我丧命的是测试,以及每当我插入某些东西时我可能会破坏某些东西的偏执狂。过去,我做了很多断言和验证检查,它们就足够了。对于这个项目,考虑到更高的复杂性,我认为这还不够。

因此,我想实现一个测试框架,但是在阅读了各种选项(Rspec、Cucumber)之后,我并不清楚我应该在什么方面投入精力,因为我有相当具体的需求,尤其是对于观察员和预定事件。

关于哪种方法和框架最合适,有什么建议和提示吗?可能会在不久的将来拯救我的屁股 ;)

这并不重要,但我使用的是 Rails 3.2/Mongoid。如果有效,很高兴升级。

最佳答案

测试可能是一个非常主观的话题,根据手头的问题采用不同的方法。

我想说,鉴于您主要需要测试端到端流程(通常称为验收测试),您绝对应该检查 cucumber 或牛排之类的东西。两者都允许您驱动 headless 浏览器并运行您的流程。这种测试将捕捉到任何大的阻碍,并允许您修改系统并在您的更改导致中断时收到通知。

单元测试虽然非常重要,并且应该始终与验收测试并行使用,但它不是用于端到端测试,它主要用于单独测试特定方法的输出

一种常用的模式称为测试驱动开发 (TDD)。在此,您首先在“外部”测试循环中编写验收测试,然后将单元测试作为“内部”测试循环的一部分对您的应用程序进行编码。这个想法是,当您完成内部循环中的代码时,外部循环也应该通过,并且您应该已经建立了足够的测试覆盖率以确信将来对代码的任何更改都会通过/未通过测试取决于是否仍然满足原始要求。

最后,测试套件应该随着应用的发展而增长和变化。您可能会发现,您的测试套件的整个部分都可以(也许应该)根据系统需求的变化进行重写。

关于ruby-on-rails - 在 Rails 中自动测试流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604300/

相关文章:

ruby-on-rails - Rails 使用了错误版本的 Ruby

Ruby:如何编写像 map 这样的 bang 方法?

rspec - 无法使用RSpec 2和Edge Rails 3进行 Controller 测试

ruby-on-rails - spork 0.9.2 和 rspec 3.0.0 = 未初始化常量 RSpec::Core::CommandLine (NameError)

ruby - 是否可以(甚至推荐)在 ChefSpec 中模拟 Ruby require 语句?

SQL JOIN 查询使用 PostgreSQL 创建重复

ruby-on-rails - rails 和雷 : Pagination showing duplicate results

ruby-on-rails - 无法在 Linux 上安装 rabbitmq-server(Oracle Linux Server 版本 6.7/RHEL)

python - 亚马逊网络服务 : python or ruby?

html - 什么是适用于 Ruby on Rails 的良好 PDF 到 HTML 转换器?