在为简单的Rails应用编写规范时,以下是否是覆盖完整测试范围的正确方法?

  • 编写所有用户故事的功能规范
  • 编写 Controller 规范,以确保各个 Action 响应正确并且设置了所有必需的变量
  • 编写模型规范以确保所有方法,验证等。正在按预期工作
  • 写邮件规范
  • 编写路由规范

  • 这是否足够(例如,如果我已编写功能规范,可以跳过一些较低级别的规范)还是不够?为什么?

    最佳答案

    您无需为每一层中的每个对象编写规范即可获得100%的测试覆盖率,也无需测试驱动(要求您实现)应用程序中的所有重要行为。取而代之的是,按照行为驱动开发(BDD)的建议,仅在必要时在外部编写规范,并编写较低级别的规范。

    测试完整性的最重要衡量标准是需求覆盖率:它对于每个用户故事以及需要新代码的每个故事的每个细节(至少要在一个测试中表示)都很有帮助。如果您遵循典型的敏捷实践(提及用户故事表明您是的),则测试可能是记录需求的唯一位置,因此,您可能无法在这种涵盖范围内加一个数字。有帮助也有帮助

  • 行覆盖率(大多数人在说测试覆盖率时的意思),意味着每一行代码至少由一个测试执行,而
  • 集成覆盖率,这意味着从一个类到另一个类的每个方法调用均由至少一个测试执行。

  • 对于每个故事,
  • 仅编写将测试驱动故事的所有不同快乐路径的功能规范。
  • 编写其他功能规范,以确保对有趣路径和悲伤路径的有趣的建筑细微变化进行集成覆盖。例如,我经常为涉及一个表单的故事编写三个功能规范:一个用户在每个可能的字段中填写并成功,另一个在用户中填写尽可能少的信息并仍然成功(确保未指定的值和默认值)然后按预期进行操作),然后用户犯了一个错误,失败,纠正了错误并获得了成功。

  • 至此,您已经测试驱动每个层( Controller ,模型, View ,帮助程序,邮件程序等)的存在,并且仅具有功能规范。
  • 编写模型和帮助程序规范,以排除详细的要求,这些要求完全存在于这些类中。例如,一旦编写了一个悲伤路径功能规范,该规范确定输入一个特定的无效属性将使用户返回以编辑其表单提交并显示一条消息,则可以通过编写更多示例来完全处理其他无效属性,模型的规范,该规范测试模型属性是否经过验证,并让已经进行测试驱动的体系结构将错误传播回用户。

    请注意,尽管您的功能规范已经通过模型和辅助方法测试了快乐路径,但是一旦您开始为较小或错误情况编写方法示例,您可能会想要为该方法编写一个或多个快乐路径示例同样,您可以在一处看到该方法的完整描述,因此您可以仅通过运行其所有示例来完全测试该方法,而不必运行任何功能规范。

  • 您可能根本不需要某些规范:
  • 构造合理的 Controller 操作简短,几乎没有条件,甚至没有条件,因此您通常根本不需要任何 Controller 规范。仅在需要时才编写它们,并排除模型,邮件程序等行为,以使其保持简单,快速。
  • 同样, View 和邮件程序应该有很少或没有条件(复杂的代码应重构为帮助程序和模型方法),因此您通常根本不需要 View 或邮件程序规范。
  • 您的功能规范将测试驱动您需要的所有路由,因此您可能不需要路由规范。当我不得不对路由进行主要的重构时(例如从一个主要版本的Rails升级到下一个主要版本),我只用过路由规范。

  • 只要您始终在编写新代码之前编写测试,就始终可以保持100%的线路覆盖率。

    关于ruby-on-rails - 如何使用RSpec测试Rails应用程序以获得完整的测试范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32143107/

    10-11 22:13
    查看更多