首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Effective Testing with RSpec 3(介绍)

我们的测试再次被打破!”“为什么套件需要这么长时间才能运行?”“无论如何,我们从这些测试中获得了什么价值?” 多年过去了,技术发生了变化,但关于自动测试的抱怨是一样的。...RSpec的每个方面都旨在解决开发人员在野外遇到的一些问题。 有了它,您可以放心地构建Ruby应用程序。...但是,当长期维护是一个优先事项时,TDD提供了重要的好处。 使用TDD,您可以在实现下一个行为之前编写每个测试用例。如果您有完善的测试,那么您可以使用更加可维护的代码。...你是谁 我们希望本书对广泛的开发人员非常有用,从刚刚开始使用RSpec的人到使用它编写成千上万的测试的人。也就是说,我们做了一些假设,以防止本书过于陷入介绍性材料。 首先,我们假设您熟悉Ruby。...当我们有针对特定受众的内容时 - 例如来自旧版RSpec的人或不熟悉Web开发的人 - 我们会将这些内容放在侧边栏中。

2K20

Effective Testing with RSpec 3 (第一部分:入门)

在本章中,你将看到: •如何安装RSpec并编写你的第一个specs •如何使用describe,和用它来组织你的specs •如何验证期望的结果 •如何解释测试失败 •如何使你的specs不受重复设置代码的影响...第1章 RSpec入门 RSpec 3是一个高效的Ruby测试框架。...是的,这很愚蠢,但它会让这些例子保持简短,我们在写这一章时感到很饿。 三明治最重要的特性是什么? 面包? 条件? 不,关于三明治最重要的是它应该味道好。 让我们用RSpec语言这么说吧。...在编写规范时,您将倾向于将每个示例都集中在您正在测试的一个特定行为片上。 测试与规格与示例 测试,规格和示例之间有什么区别? 它们都引用您编写的代码来检查程序的行为。...这些是您在构建测试套件时一次又一次地触及的构建块。 充分利用RSpec 三明治的规格有两个目的: •记录三明治应该做什么 •检查三明治是否符合预期 我们认为这个规范非常适合第一个目的。

2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    持续测试基础设施

    因此,持续测试不仅是持续交付高质量软件的必要保障,对于基础设施而言,其价值和影响更为深远。 本文来分享一下我们团队是如何对基础设施进行测试的。 测试的范围 首先我们要识别出需要测什么。...之后是应用开发语言的测试框架,如 Bash 的 bats、Ruby 的 RSpec 和 JavaScript 的 Jest。...我的选择则是 Ruby/RSpec,因为 Ruby 简洁自然的语法和 RSpec 的强大验证器,让测试代码中很少出现语言自身导致的难懂和多余的代码。...当我们代码中包含逻辑时,我们就需要通过配置 local backend、不同配置和 state 文件来本地验证对应的 plan 结果。...与应用测试一样,任何一条失败的测试都应让我们的 Pipeline 变红,向团队告警。并确保只有在前一个环境被验证通过后,我们才向下一个环境前进。 一个测试的范例 我们以 Ruby/RSpec 为例。

    23320

    开发者死后,他的开源项目会有人继续维护吗?

    当 Weirich 于 2014 年去世时,Searls 注意到没有人再去维护 Weirich 的一个软件测试工具。...前文提到他给 Ruby 做了一些的关键工具,包括了他给 Ruby 开发的 build 工具Rake。在 Weirich 离世后,Rake 已移交到 Ruby 官方。...事件凸显了开源软件社区日益关注的一个问题。当程序员过世后他们所编写的代码会怎么样?关于在用户死后其社交媒体账户会发生什么的文章已经写得很多了。但关于程序员过世这个问题没有那么多人关注。...去年,当程序员 Azer Koçulu 从互联网上删除了一个叫做 Leftpad 的代码库后时,它造成了涟漪效应,据说在 Facebook、Netflix和其他很多地方都引起了令人头痛的问题。...但是 Searls 注意到一个测试工具 Rspec-Given 没有被移交出去,他有意负责更新,但一路上遇到了不少麻烦。

    1.3K100

    “小众”之美——Ruby在QA自动化中的应用

    背景 加入外卖上海团队时,共2名QA同学,分别负责App与M站的功能测试,自动化测试停留在学习北京侧接口测试框架的阶段,实效上近乎为0,能力结构上在代码这部分是明显薄弱的。...在过去对自动化测试的多种尝试及实践的总结后,选择了Ruby。 Why Ruby? 简单点说就是:并不聪明的大脑加上“好逸恶劳”的思想,促使我在这些年的自动化测试实践中,不断寻找更合适的解决方案。...接口测试类文件(HTTP接口调用为例)生成的模板如下,修改对应的接口信息即可,支持DB验证(代码块p这部分是目前唯一需要写Ruby代码的地方,当然这是非必需项)。...正因为有特色的技术,才值得去研究和学习,就像它的设计者所说,目的就是为了让开发人员觉得编程是件快乐的事情。做了这么些年的测试,还能够不停止写代码的脚步,也是因为几年前开始接触Ruby。...不论将来是否成为主流,它仍然是测试领域工具语言的不错选择,不管以后会出现什么样的技术,选型的标准也不会改变。技术的世界没有主流与小众,只有理解正确与否,应用得当与否。

    1.9K30

    Google 是如何设计 Ruby Serverless Runtime 的?

    我不会逐步介绍设计本身。相反,我想讨论我们面临的一些设计问题,做出的决策以及为什么做出这些决策。因为这是一个关于如何将 Ruby 约定与公共云约定融合的有趣练习。...在坚持我们社区所熟悉的 Ruby 习惯、实践和工具的同时,我们还必须重新思考如何在几乎每个层次上进行 web 应用程序开发,从代码到依赖、持久化、测试等等。...Ruby 首先是一种面向对象的语言。当我们编写代码并将其封装在 def 中时,我们正在编写一个方法,这是响应发送给对象的消息而运行的代码。...end 虽然这段代码看起来很简单,但重要的是要记住它实际上做了什么。它将这个“函数”添加为 Object 类的私有方法,Object 类是 Ruby 类层次结构的基类。...在某些情况下,就像测试一样,它鼓励我们在 Ruby 文化的优点上加倍下注。在另一些情况下,就像在严格意义上讲没有函数的语言中如何表达和标记函数一样,它挑战了我们关于如何呈现代码并传达其意图的想法。

    2.2K60

    实现一个简单的Database4(译文)

    SQLite的数据库实现,通过这个简单的项目,可以很好的理解数据库是如何运行的。...本文是第四篇,主要是使用rspec对目前实现的功能进行测试并解决测试出现BUG Part 4 我们的第一个测试(和BUG) 我们已经获得插入数据到数据库并打印所有数据的能力。...现在来测试一下目前已有的功能。 我使用rspec来写我的测试,因为我对rspec很熟悉,它的语法也相当易读。...译注:rsepec 是一个基于Ruby的测试框架,语法非常简单,可以很方便的测试各种可执行程序,判断输出 我定义一个短小的help来发送一个帮助命令列表到数据库,然后对输出进行断言。.../spec/main_spec.rb:48:in `block (2 levels) in ' 如果是我们自己人工来测试,当我们打印行数据时,会看到有一些奇怪的字符(例子中

    1.5K20

    GitLabCI系列之流水线语法第四部分

    如何让不同的job缓存不同的cache呢?设置不同的cache:key。 ---- cache:key 缓存标记 为缓存做个标记,可以配置job、分支为key来实现分支、作业特定的缓存。...为不同 job 定义了不同的 cache:key 时, 会为每个 job 分配一个独立的 cache。...将生成一个新的缓存密钥,并为该密钥创建一个新的缓存. 如果Gemfile.lock未发生变化 ,则将前缀添加default ,因此示例中的键为rspec-default 。...开始第二个作业test,此时会把当前目录中的target目录删除掉(因为做了git 对比)。 ? 获取到第一个作业生成的缓存target目录。 ?...,这种情况如果每个作业都对缓存目录做了更改,会出现缓存被覆盖的场景。

    2.3K10

    Step by Step!Kubernetes持续部署指南

    然后我做了我在这一状况下常做的事:通过实践来学习。通过一个简单的例子可以很好地理解错综复杂的问题,所以我自己一步一步完成了整个部署过程。...最后,我们做到了,虽然远未达到规定的一周时间——我们花了将近一个月的时间来创建三个集群,包括它们的开发、测试和生产。 本文我将详细介绍如何将应用程序部署到Kubernetes。...阅读完本文之后,你将拥有一个高效的Kubernetes部署和持续交付工作流程。 持续集成与交付 持续集成是在每次应用程序更新时构建和测试的实践。通过以少量的工作,更早地检测到错误并立即解决。...请注意我们重复使用了checkout和cache的代码以将初始文件放入job中。最后一个命令用于启动RSpec测试套件。...我们的Docker镜像将包含应用程序的代码、Ruby以及所有的库。

    85020

    Ansible和Docker的作用和用法

    更厉害的是,它提供一套内建的、可扩展的模块库文件,通过它你可以控制所有的一切:包管理器、云服务供应商、数据库等等等等。 为什么要使用 Docker?...当我把应用代码从远端 clone 下来,或者上传到远端时,我就不再需要提供 git 所需的证书了,我的 ssh 代理会帮我通过 git 主机的身份验证程序的。...Docker 和应用的依赖性 我发现有一点挺有意思的:大部分开发者非常了解他们的应用需要什么版本的编程语言,这些语言依赖关系有多种形式:Python 的包、Ruby 的打包系统 gems、node.js...我的应用包括一个 Dockerfile,它详细指定了 Ruby Docker 镜像的信息,这里面的步骤能够保证把正确的 Ruby 版本加载到镜像中。...我可以在1分钟之内和我的客户一起验证新代码,保证不同版本的应用之间是完全隔离的,同操作系统也是隔离的。传统虚拟机启动系统时需要花费好几分钟,Docker 容器只花几秒。

    2.2K20

    使用spring提高rails开发效率

    rails开发者都有着这样类似的经历: pair写了一个测试 运行测试 等待 该我来编写产品代码 运行测试 等待 代码有bug 测试失败 修复测试 运行测试 等待 测试通过,yeah!...再回过头来想想,我享受这段pair的过程吗? pair很给力,很快就把一个taks实现成一个测试用例 桌子上的水果也很好吃。 。。。...可是,我总觉得有点不爽快,原来是那么多的等待,每运行一次测试,就需要等待十几秒甚至几十秒,每天我会运行上千次测试,这是多大的浪费?...他们的原理都是预先把rails环境启动起来,后面在运行测试,执行rake task时从这个启动好的进程fork一个进程,在这个进程中执行操作。...: spring rspec 当第一次使用spring运行测试,rake taks, db migration时,spring会自动在后台load rails 环境,因此执行速度也很慢,但是当再次执行时

    3.5K60

    用 GitLab 做 CICD 是什么感觉,太强了!!

    Git仓库中托管的应用程序代码库中,并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。...它涉及到在每次小的迭代中就不断地构建、测试和部署代码更改,从而减少了基于已经存在bug或失败的先前版本开发新代码的机会。...GitLab CI/CD 是如何工作的 为了使用GitLab CI/CD,你需要一个托管在GitLab上的应用程序代码库,并且在根目录中的.gitlab-ci.yml文件中指定构建、测试和部署的脚本。...创建一个 .gitlab-ci.yml 文件 通过配置.gitlab-ci.yml文件来告诉CI要对你的项目做什么。它位于仓库的根目录下。...紧挨着第二个是一个带小图像的图标,Prometheus将在其中收集有关Kubernetes集群以及应用程序如何影响它的数据(在内存/ CPU使用率,延迟等方面) ?

    10K43

    开发人员看测试之TDD和BDD

    正文: Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。...测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。 它的工作流程如下所示: ?...我眼中的测试   之前一直对于测试都是一个笼统的认知,觉得测试仅仅是一种验证,类似于部分企业中一些比较省事的测试方法,通常在代码写好之后再实施测试工作,用于验证developer的代码是否符合需求。...通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。再往上,就是BDD(灰盒测试、黑盒测试),主要用于测试代码是否符合客户的需求,这里的BDD更加侧重于代码的功能逻辑。   ...Cuke4Duke PHP – PHPSpec Python – Specipy Ruby – RSpec, Shoulda, Cucumber 与Java相关的BDD测试工具: JBehave –

    2.1K60

    GitLab CICD 配置指南 .gitlab-ci.yml文件的配置

    .gitlab-ci.yml文件,并且配置了Runner,那么每次提交代码 都会触发CI的pipline .gitlab-ci.yml文件是告诉GitLab的runner去做什么在每次触发后,runner...默认有三个阶段, build,test,deploy,你不必每次编写都使用三个阶段,如果一个阶段没有任务,可以直接忽略它 因为.gitlab-ci.yml是存在于项目中的,所有可以进行版本,分支控制,...下面是一个Ruby的项目 before_script: - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs...这是对大多数Ruby应用都适用的简单配置 定义了两个任务 rspec和rubocop 分别会执行不同的脚本 在每次任务执行之前,定义的before_script脚本都会先被执行 .gitlab-ci.yml...可以设置一些任务,限定他们以什么顺序,怎么去执行命令,脚本.

    1.1K10

    GitLab CI CD管道配置参考 .gitlab-ci.yml文件定义字段

    该.gitlab-ci.yml文件定义管道的结构和顺序,并确定: 使用GitLab Runner执行什么。 遇到特定条件时要做出什么决定。例如,当一个过程成功或失败时。...了解Verizon如何 使用GitLab 将重建工作从30天减少到8小时以下。...dependencies 通过提供要从中获取工件的作业列表,限制将哪些工件传递给特定作业。 coverage 给定作业的代码覆盖率设置。 retry 发生故障时可以自动重试作业的时间和次数。...:2.5图像被设置为除rspec 2.6使用该ruby:2.6图像的作业以外的所有作业的默认图像: default: image: ruby:2.5 rspec: script: bundle...exec rspec rspec 2.6: image: ruby:2.6 script: bundle exec rspec inherit 在GitLab 12.9中引入。

    22.3K20

    logstash input插件开发

    本文以开发logstash的cos input插件为例,介绍如何开发logstash的input插件。.../ 环境准备 logstash使用jruby开发,首先要配置jruby环境: 1 安装rvm rvm是一个ruby管理器,可以安装并管理ruby环境,也可以通过命令行切换到不同的ruby版本。...::Inputs::Base基类 cos_spec.rb: 单元测试文件,通过rspec可以对cos.rb中的代码进行测试 logstash-input-cos.gemspec: 类似于maven中的pom.xml...: 通过Stud ruby模块执行定时任务,interval可自定义,从配置文件中读取 生成event, 示例代码生成了一个包含两个字段数据的event 调用decorate()方法, 给该event打上...是一个ruby测试库,通过bundle命令执行rspec: bundle exec rspec 如果cos.rb中的代码没有语法或运行时错误,则会出现如果信息表明测试成功: Finished in 0.8022

    4.1K61

    Kahlan:款革命性PHP自动化测试框架

    概述 在寻找一个能够提升PHP单元测试体验的工具吗?那么,Kahlan可能就是你要找的答案。...Kahlan是一个功能完备的单元和行为驱动开发(BDD)测试框架,它借鉴了RSpec和JSpec的设计理念,引入了一种全新的describe-it语法,让PHP的测试更加直观和高效。...介绍 Kahlan的核心亮点在于无需依赖PECL扩展,就能实现类似于Ruby或JavaScript的代码模拟(stubbing)和猴子补丁(monkey patching)。...这意味着你可以直接在你的PHP代码上进行快速灵活的测试,而不需要额外的库或者配置。 技术分析 Kahlan提供了一系列强大的特性,包括: RSpec/JSpec风格的语法:使测试代码更简洁易读。...对代码覆盖率有要求的团队,Kahlan能提供详细的覆盖信息。 需要控制外部依赖或模拟复杂交互的测试环境。

    17710

    使用 YAML 文件配置 Jenkins 流水线

    为什么呢?...它能将 GitHub 的组织中符合规则的项目自动添加到 Jenkins 中。唯一的约束就是在每一个分支下都必须有一个 Jenkinsfile,用于描述如何构建项目。...我们可以将构建配置写入到一个被检入到代码库的文件中,并且允许任务有权限访问的人修改。...共享库是用 Groovy 编写的,可以导入到流水线中,并在必要时执行。 如果你细心观察以下 Jenkinsfile,你会看到代码是一个接收闭包的方法调用链,我们执行另一个方法将一个新的闭包传递给它。...共享库有一个好处是我们可以集中扩展和修改我们的共享库代码。一旦添加新代码,Jenkins 就会自动更新它,还会通知所有的任务。 由于我们有不同语言的项目,我们使用 Docker 来构建测试环境。

    4.8K40

    码农,你真的了解TDD和BDD吗?

    我们在日常工作中也不妨多想想, 有哪些做法是好的,如果把它推向极致会是什么样子。 这种想问题的方式会在很大程度上拓宽你的思路。 说完了TDD,那什么是BDD呢?...Dan North 不仅仅提出了概念,而且为了践行他的想法,他还创造了第一个 BDD 的框架:JBehave。后来又改写出基于 Ruby 的版本 RBehave,这个项目后来被并到 RSpec 中。...今天最流行的 BDD 框架应该是 Cucumber,它的作者就是 RSpec 的作者之一 Aslak Hellesøy。...既然 BDD 的用例更多偏向业务视角,所以在真实的项目中使用它时,我们更多偏向于把它当做验收测试的工具来用。这里就会有一个我们常常忽略的点:业务测试的模型。很多人的第一直觉是,一个测试要啥模型?...我从 RSpec 的文档上截取了一段代码,你可以感受一下。

    98510

    GitLab 是如何用 Headless Chrome 测试的

    下面的例子介绍了GitLab如何切换到Headless Chrome GitLab最近从PhantomJS转变为Headless Chrome,用于前端测试和RSpec功能测试(ruby测试框架)。...一个原生的无头浏览器会改变测试的风云变幻格局。(我没头,不怕砍头!)开发者竟然能在现代浏览器的无头环境下进行集成测试!...这个方法时触发一个DOM事件来模拟点击,而不是实际点击元素。这并不是一个好的做法,但是我们经常会遇到类似的问题,很多开发者都习惯这样解决。这会导致一些懒惰和草率的测试用例。...如果你的前端代码中有一个导致测试失败的bug,这个功能将使调试更容易,因为你可以检查测试的终端输出的错误消息或堆栈跟踪,或者将console.log()注入到JavaScript以查看正在运行的代码。...现在可以通过关闭无头模式来交互式地检查失败的测试,将一个byebug行放入测试用例,并在提示中键入命令时观看浏览器窗口。这项技术在项目中非常有用。

    3.2K80
    领券