【发布时间】:2012-05-18 21:48:47
【问题描述】:
假设厨师可以制作食谱,副厨师可以制作必须得到主厨批准的食谱。
您想测试一下,当主厨查看她的主页时,她会看到她自己创建的食谱。您还想测试她是否看到有等待她批准的食谱。
我可以想到两种方法来做到这一点:
- 测试视图是否包含某些字词,例如“您的食谱”和“正在等待您批准的食谱”
- 向您正在使用的 html 元素添加不必要的属性,以便您可以检查具有“id=recipe_1”或“data-for-the-sake-of-testing=1”的元素
我非常不喜欢这两种方法。
为什么方法 #1 很烂
- 难以置信的脆弱测试。每次您想对副本进行小幅更新时,测试都会中断。
- i18n?这种方法将如何发挥作用?
可能还有更多的原因,但这两个是相当大的。
为什么方法 #2 很烂
为了测试而有多余的标记是多么令人讨厌!用户不应为了测试而增加下载大小。
对此有什么好的方法?我很想听听任何替代方案,无论您使用哪种语言。我主要使用 Ruby、Test::Unit、Minitest、RSpec 和 Cucumber(尽管我的 Cuke 技能已经过时),但如果其他语言/框架弄明白了,我也很想看看他们在做什么。
【问题讨论】:
-
这些不是链接吗?例如
href=ddd?recipeid=1234?并且您可以测试应该存在的所有链接(并且不存在其他链接),因此您需要有一个独立的配方列表(例如来自以前的测试用例或数据库查询).. -
在这个例子中,它们可能是链接。但不一定。 URL 可以更改,因此也有些脆弱。 (i18n 可以更改 URL,也可以将其从“/recipes?id=1”重组为“/recipes/1”。)但是,我对非必要链接文本的一般情况更感兴趣。如何测试?
-
如果应用程序可以解码“/recipes/1”链接,那么显然是可以做到的 => 所以你可以编写一个测试来做到这一点。如果需要,可以将本地化字符串追溯到原始 id.. 但我没有写一本关于测试的书,所以我不知道什么是“正确”的方法;)
标签: view tdd integration-testing bdd