2

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

例如,当学生完成他一天的课程时,应该发生以下情况:

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

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

杀死我的是测试,以及每当我推动某物时我可能会破坏某物的偏执狂。过去,我做了很多断言和验证检查,它们就足够了。对于这个项目,考虑到复杂性的提高,我认为这还不够。

因此,我想实现一个测试框架,但是在阅读了各种选项(Rspec、Cucumber)之后,鉴于我相当具体的需求,特别是对于观察者和预定的事件。

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

没关系,但我使用的是 Rails 3.2 / Mongoid。如果它有效,很高兴升级。

4

2 回答 2

1

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

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

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

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

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

于 2013-09-04T07:22:43.847 回答
0

单元测试是必须的。您可以为此使用 Rspec 或 TestUnit。它会给你至少80%的信心。

为控制器规格启用“渲染视图”。这样,您将更快地捕获语法错误和简单的逻辑错误。有一些方法可以测试 sidekiq 作业。看看这个

一旦你确信你有足够的单元测试,你就可以开始考虑使用 cucumber/capybara 或 rspec/capybara 进行功能测试。

于 2013-09-04T03:50:46.737 回答