Top*_*gio 29 ruby testing rspec
我刚开始写RSpec的测试,我碰上了thoughtbot的风格指南,其中建议对let,let!,before和subject(等等).
我也在其他几个地方读过类似的建议(包括旧的RSpec文档警告before(:all)),但我似乎无法找到反对它们的实际论据.
所以问题是:
为什么我不应该在测试中使用这些方法?什么是更好的方法?
Pra*_*thy 28
有趣的问题; 我想要了解更多的东西......所以挖了一下,这就是我发现的:
let等等.避免使用它,let,let !,指定,主题和其他DSL.更喜欢明确性和一致性.
ThoughtBot的人发了一个帖子,让名字让我们不要.另请参阅Github Commit Comment对话的链接
在他们最近的一个播客中,ThoughtBot的首席技术官Joe Ferris解释了为什么使用let和使用它并不是一个好主意subject.在接下来的5分钟内,从27m37s标记开始播放名为Something Else Was Smellier的播客.
测试反模式'神秘客户',在较旧的ThoughtBot博客帖子中详细讨论,是不使用let及其表兄弟的主要原因.
总结一下我对上述所有内容的理解非常简洁:
使用
letet等,很难快速了解测试中发生的情况,并要求此人花一些时间进行连接.编写测试,使其易于理解而不需要太多努力.
此外,
let在测试中大量使用导致测试之间的过度共享,以及隐含common fixtures- 即,即使不适用,也要为每个正在编写的测试开始使用通用夹具.
反对使用的论点before(:all)是直截了当的.正如旧的rspec文档中所解释的那样:
警告:通常不鼓励使用before(:all)和after(:all),因为它引入了Examples之间的依赖关系.如果你知道自己在做什么,它可能对非常昂贵的操作有用.
before(:all)只在ExampleGroup的开头执行一次.因此,有可能无意中在实施例之间引入依赖性.Thoughtbot关于测试不容易理解的断言也适用于此.
总之,编写更好的规范的建议似乎是: