RSpec测试(请求规格,特征规格和集成规格)

时间:2015-07-03 10:47:42

标签: ruby-on-rails ruby testing rspec integration-testing

我是Ruby on Rails开发人员,我目前正在学习RSpec。我已经完成了使用Rails内置测试框架ActiveSupport :: TestCase的http://guides.rubyonrails.org/testing.html中涵盖的基本Rails测试。在那里,我看到了集成测试。

然后,当我开始学习RSpec并浏览http://rspec.info/documentation/3.3/rspec-rails/上的rspec-rails文档时,会讨论请求规范,许多Rails开发人员更喜欢使用Capybara和FactoryGirl。但是Capybara规范被置于spec/features目录下。

所以我真的与Request specs,Integration tests和feature specs混淆了。他们做了什么?它们是等价的吗?在请求/集成/功能规范中测试了哪些类型的功能?

如果有人清除了它,那将会很有帮助,

谢谢。

2 个答案:

答案 0 :(得分:1)

首先,了解Rails默认使用minitest非常重要。 话虽这么说,你也有请求规格。

RSpec和minitest只是两个测试框架:它们提供了一组实用程序(本机或通过插件),以帮助您编写测试,因此例如available assertions由minitest提供,并且一些添加由Rails本身。

到目前为止,根据我的理解,集成测试,功能规格和请求规范是一回事。它们确实有不同的名称/目录,但它们实际上可以被认为是 e2e testing ,我认为这更明确:端到端测试意味着你执行测试就像如果您是用户,那么您打开浏览器,单击一堆按钮,填写一些字段,按确定,查看结果。

话虽如此,Capybara被认为更适合集成测试,因为它运行在真正的浏览器实现上(Selenium基于Firefox),所以它正确处理html / javascript / css,就像现代浏览器一样,而默认Rails实现缺乏我相信(我不确定这最后一句话,因为我使用它已经有一段时间了。)

FactoryGirl是与您提到的所有内容完全独立的库,它只是一个快速实现具有虚拟数据的对象的工具,对任何类型的测试都有帮助,甚至是单元测试。

RSpec是一个不同的框架,我使用它,因为当我开始时,minitest不是一个东西(虽然我最近重新考虑它),我喜欢rspec-mocks很多,所以现在我会坚持下去。这是个人选择,主要是基于语法的。

<强>摘要

到目前为止,我自己想出了一些用于测试的规则:使用capybara进行集成/功能/请求规范(是的,它们都是一样的),因此您使用正确的浏览器是安全的解析。 使用默认Rails 请求规范(在Rspec中表示您将测试标记为type: :request并将其标记为requests目录)如果您使用的是Rails作为一个JSON API(因此,没有真正的浏览器交互),在这种情况下,它比水豚更快,并已经实现了它所需要的任何东西。 其他所有它都是单元测试,这是你将主要使用的(e2e测试可能需要很长时间才能编写并且运行缓慢),它将允许您在没有F5驱动开发的情况下进行编程(实际上,我不会检查浏览器当我为Rails应用程序开发一些东西时,除非我完成代码),你应该测试你编写的每个类的所有公共方法,以及所有可能的路径。如果你保持每行约5行,那么它很简单快速,你的代码也会有很大改进,更不用说你的测试了。

答案 1 :(得分:1)

  

不再支持Capybara   请求Capybara 2.0.0的规格。推荐使用Capybara的方法是   功能规格。

以上内容来自3.3的RSpec文档:

https://relishapp.com/rspec/rspec-rails/v/3-3/docs/request-specs/request-spec(3.3)

https://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec(最新版本)

目前: 在功能规格中使用Capybara。

我认为您的问题是基于阅读较旧文章的混淆造成的。事情变了。请阅读此处了解更多详情:http://blog.plataformatec.com.br/2012/06/improving-the-integration-between-capybara-and-rspec/