我想了解使用rspec测试多步骤工作流程的习惯用法或最佳实践。在rspec中测试多步骤工作流程
让我们作为一个例子的“购物车”系统,其中当用户提交到篮下,我们没有使用HTTPS购买过程中可能会
- ,重定向到https
- 当用户提交到篮子,我们使用的是HTTPS并没有什么饼干,创建并显示一个新的篮子里,当用户提交篮发送回一个cookie
- ,我们使用的是HTTPS,有一个有效的cookie和新的项目是不同的产品比第一个项目,添加一条线到篮子并显示两条线
- 当用户提交到购物篮并且我们使用的是https并且有一个有效的cookie,并且新项目用于与前一个产品相同的产品时,增加该购物篮的数量并显示两行
- 当用户单击“结帐”篮子页面上,并使用HTTPS并有一个cookie和篮非空和...
- ...
我读过http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/,其职责IA每个“它阻止”应该只包含一个断言:不是进行计算,然后在同一个块中测试多个属性,在上下文中使用“before”来创建(或检索)测试中的对象并将其分配给@some_instance_variable,然后将每个属性测试写为一个单独的块。这有点帮助,但是在上面所述的测试步骤n需要执行步骤[1..n-1]的所有设置的情况下,我发现自己要么复制设置代码(显然不好),要么创建大量辅助函数越来越笨拙的名字(def create_basket_with_three_lines_and_two_products),并在每一步的前一个块中连续调用它们。
如何做到这一点不太冗长/繁琐任何提示吗?我很欣赏这个想法背后的一般原则,即每个例子不应该依赖于前面例子留下的状态,但是当你测试一个多步骤的过程并且在任何步骤都会出错的时候,为每一步设置上下文是不可避免地会需要重新运行所有前面的n个步骤中的设置,所以......
现在您已经使用rspec-steps gem,您是否满意解决多步骤尊重问题的结果? – Angela 2015-05-11 04:16:55
@Angela:恩,好问题。我简单地使用了它,但小组的其他成员并不热衷于此,所以我们最终放弃了它,并有更多的重复。我*认为*理由是我们需要更多的可读性,但这是一个很长的时间....在这一点上,我发现真正的集成测试是最简单的,只是写作一个大功能,每个测试只执行一次“工作流程”。不是最习惯或流行的方法,但我喜欢可读性。 – Nerdmaster 2015-05-11 15:56:58
我在rspec中只看到一个'describe'? – Angela 2015-05-13 05:54:47