Ruby On Rails控制器测试,工厂或模拟?

时间:2014-01-29 09:52:52

标签: unit-testing rspec ruby-on-rails-4 mocking

我对rails的测试部分比较陌生。我用过其他语言的单元测试。但是使用rails我已经注意到那些使用模拟测试控制器和其他使用工厂的例子,这里的最佳做法是什么?

使用模拟的示例:http://solnic.eu/2012/02/02/yes-you-should-write-controller-tests.html 使用工厂的示例:http://everydayrails.com/2012/04/07/testing-series-rspec-controllers.html

在我的研究中,我注意到了这个问题: Rails Model Testing - Mocking vs. Factories 控制器的答案是否相同?

我倾向于嘲笑,主要是为了加快速度并单独测试,但是我看到了暗示嘲讽导致测试变得脆弱的评论。

1 个答案:

答案 0 :(得分:2)

模拟最好让你隔离你的测试。如果您正在测试控制器发送的消息(可能是您发送的消息),则没有理由将这些消息发送到真实实例化的工厂创建的对象。你可以将它们发送给模拟器​​。

另外,如果你看第二个例子。大多数情况下,您正在使用它们来生成一组有效的属性以发送到POST或UPDATE请求。无论如何,使用attributes_for而不是整个对象。

我发现有一个非常有趣的事情就是对我这个关于控制器测试的问题进行了挣扎,突出了我们构建和使用我们的Rails控制器的传统方式有时是有缺陷的,并鼓励很多非OO实践。

这里有另一种方法的例子:https://www.youtube.com/watch?v=CGN4RFkhH2M 这将非常容易使用模拟进行测试,并遵循Sandi Metz在Ruby中的实用面向对象设计中所采用的方法 - 以及此演讲:http://www.confreaks.com/videos/2452-railsconf2013-the-magic-tricks-of-testing

我包含两个链接,因为您似乎希望了解有关该主题的更多信息。