首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RSpec和黄瓜在RoR野生植物中的应用

RSpec和黄瓜在RoR野生植物中的应用
EN

Stack Overflow用户
提问于 2016-04-30 15:32:27
回答 3查看 483关注 0票数 1

我正在学习RSpec和Cucumber,这样我就可以在工作中为Rails网站编写测试了。

在学习的时候,我用了一本叫做“RSpec书: RSpec,黄瓜和朋友的BDD”的书。在此期间,RSpec用于粒度测试,Cucumber用于总体可用性测试。

这本书以一个简单的CLI游戏为例。

现在我进入了一个网络环境,想知道在网络环境中测试的心态是什么。

我已经知道我将为我的模型和控制器编写规范测试。

我假设Cucumber出现的地方是完整的特性测试,它将使用控制器和模型来完成。

如果我错了,请纠正我,但让我们假设有用户,邮政和喜欢的模型。

这些规范中的每一个都有一个模型规范+,但是有许多控制器规范。

然后,我将编写一个功能测试如下:

代码语言:javascript
运行
复制
Feature: liking a post
  As a user of abc.com
  I want to like a post
  So that I can show my friends

在那里我会以某人的身份登录,找到一个帖子,并喜欢它?

有经验的人会分享在Rails应用程序上使用这些工具测试的方法的角度吗?

假设我必须实现上述情况,您会从充实特性测试开始,编写模型规范,然后编写控制器规范,然后编写代码吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-01 17:18:20

为了完整起见,重复其他一些话:

一种名为BDD (请参阅bdd)的好方法在

  • 使用验收测试(在Ruby中通常编写为Cucumber特性或RSpec特性规范)来测试驱动特性。
  • 测试-驾驶细节与单元测试,以表达详细的要求,如有必要。

使用这种方法来测试-驱动Rails项目的一个特性,您首先编写一个验收测试,然后实现它,这将产生该特性所需的路由、视图、控制器和模型。由于您是测试驾驶,您还没有编写任何通过验收测试进行全面测试的代码,并且您还不需要任何控制器、模型等规范。然后,您可以重新开始另一个验收测试,或者您可能希望使用较低级别的规范测试一些详细的需求。

假设您的验收测试测试了一个用户的全名显示在页面上,并且您希望确保当用户没有输入他们的姓氏时,它看起来是正确的。如果User#full_name返回用户的全名,您可以只为该方法编写模型规范,而不是编写另一个验收测试。

根据我的经验,使用BDD编写的考虑因素充分的Rails应用程序需要很少或根本不需要控制器规范,因为控制器应该尽可能多地委托给模型和其他类,因此可以通过验收测试进行完全测试。许多细节最好在模型规范中进行测试。

关于如何编写验收测试,我需要不同意其他人关于Cucumber的说法,或者至少给出一个警告:我看到Cucumber为大型生产应用程序创建了一个可读的、可维护的验收测试套件,而RSpec特性规范导致了一个臃肿的、不可维护的验收测试套件,所以不要忽略Cucumber,或者它解决的需求:

  • 不要被这样的想法所愚弄,即人类可读的验收测试只针对您的产品所有者或客户;它们对工程师绝对有价值,允许您在适当的时候进行高层次的思考,而不是在代码的噪音中迷失方向。项目越大,你就越关心。
  • 黄瓜很好地将测试中的步骤的接受级别描述与这些步骤的实现(CSS选择器、ActiveRecord查询等)分开,几乎自动使这些步骤可重用。使用RSpec特性规范,这完全取决于您;准备好自己的系统,将细节提取到方法中,这些方法的名称表明每个步骤的用户级点是什么。(我指的不是页面对象;它们的详细程度低于我的意思,在Cucumber和RSpec特性规范中都很有用。)
票数 2
EN

Stack Overflow用户

发布于 2016-04-30 15:48:27

黄瓜在这里的作用是作为验收规格。它们从用户的角度测试应用程序作为一个整体的行为。它们涵盖了从路由到控制器、模型和视图的整个堆栈。

在BDD中,您经常使用验收测试,不只是像TDD那样在蛋糕上结霜,而是作为开发中所谓的外部驱动力。

在开发过程中,您将创建一个失败的规范,在设置路由、控制器或任何基础之前详细说明用户的情况。

将其与传统的TDD方法进行比较,您可以先将其分解为最小的单位,以获得快速的红、黄、绿循环。然后,您将开始将块堆叠在一起,测试将逐渐覆盖越来越多的堆栈。

然而,这并不意味着接受规范是唯一有用的规范形式--它们具有相当大的开销,并且很难测试边缘情况。因此,仅仅使用黄瓜并不是一个非常有吸引力的解决方案。

票数 2
EN

Stack Overflow用户

发布于 2016-04-30 15:49:32

首先,这是最重要的意见,但如下所述。一般来说,对于TDD,我试着从外部(在开发中)工作.换句话说,编写特性规范,然后编写控制器规范(如果需要),然后编写模型规范。这里的理由是,您的特性测试是应用程序面向用户的方面。预先关注高级用户行为有助于减少浪费时间和构建不需要的东西。此外,如果您从特性测试开始,您可以模拟/存根更低级别的应用程序,如您的控制器中的模型交互,这将产生更快的隔离测试。

最后,再一次,这是一个更多的观点--我认为使用Cucumber和RSpec都太过分了。RSpec工作正常,处理单元测试更好,而且比Cucumber更易于维护。每次我使用这两种方法创建一个项目时,我最终都会放弃使用Cucumber,只需坚持使用RSpec。

具体来说,为了测试用户登录,我建议将这两种方法都包括进来,这使得登录用户的速度更快,https://github.com/plataformatec/devise#test-helpers更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36956779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档