【发布时间】:2010-12-13 16:10:19
【问题描述】:
我想了解使用 rspec 测试多步骤工作流的习惯用法或最佳实践。
让我们以“购物车”系统为例,购买过程可能在其中
- 当用户提交到购物篮并且我们没有使用 https 时,重定向到 https
- 当用户提交到购物篮并且我们使用 https 并且没有 cookie 时,创建并显示一个新购物篮并发回一个 cookie
- 当用户提交到购物篮并且我们使用 https 并且有一个有效的 cookie 并且新商品与第一个商品的产品不同时,在购物篮中添加一行并显示这两行
- 当用户提交到购物篮并且我们使用 https 并且有一个有效的 cookie 并且新商品与前一个产品是相同的产品时,增加该购物篮行的数量并显示这两行
- 当用户点击购物篮页面上的“结帐”并使用 https 并且有一个 cookie 并且购物篮非空且...
- ...
我读过http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/,它建议 i.a 每个“it 块”应该只包含一个断言:不要进行计算然后在同一个块中测试多个属性,而是在上下文中使用“之前”来创建(或检索)被测对象并将其分配给@some_instance_variable,然后将每个属性测试写为一个单独的块。这有点帮助,但在上面概述的情况下,测试步骤 n 需要为步骤 [1..n-1] 进行所有设置,我发现自己要么复制设置代码(显然不好),要么创建大量辅助函数具有越来越笨拙的名称(def create_basket_with_three_lines_and_two_products)并在每个步骤的 before 块中连续调用它们。
关于如何不那么冗长/乏味地执行此操作的任何提示?我很欣赏这个想法背后的一般原则,即每个示例不应依赖于先前示例留下的状态,但是当您测试多步骤过程并且任何步骤都可能出错时,为每个步骤设置上下文是不可避免地需要重新运行前 n 步的所有设置,所以...
【问题讨论】: