使用 Ruby 构建测试:基础知识

2025-06-07

使用 Ruby 构建测试:基础知识

我在训练营期间,学习环境都是基于测试构建的,这意味着我通过运行测试、查看错误以及调试代码来学习,了解哪些代码有效、哪些无效。最大的问题是,我们这些学生从来没有学过如何构建这些测试。我知道它们是什么样子的。我大概知道每行代码在做什么,但我从来不明白后台到底发生了什么。

直到最近,我才决定接受挑战,学习如何构建自己的测试。在找工作和参与 Twitter 科技圈的过程中,我了解到测试驱动开发 (TDD) 是开发人员必须掌握的一项重要技能。TDD 是我作为软件工程师 (SWE) 的第一个职位上最有可能要学习的技能,所以我想趁着找工作的时候,大胆地自学一下。

在学习构建自己的测试的过程中,我遇到了不少有用的教程,但很少有教程能够详细解释每一行代码背后的真正含义。正因如此,我才写下了这个博客系列——《用 Ruby 构建测试》。我希望为初学者提供 RSpec 测试的幕后知识。作为本系列的第一篇文章,我将介绍 RSpec 测试的基本结构。让我们开始吧!

什么是 TDD?

在我们直接深入构建 RSpec 测试之前,让我们首先定义 TDD。

测试驱动开发 (TDD) 是一种依赖于重复非常短的开发周期的软件开发过程:首先,开发人员编写一个(最初失败的)自动化测试用例,定义所需的改进或新功能,然后生成通过该测试的最少代码,最后将新代码重构为可接受的标准。

引自《测试驱动开发(TDD):示例演练》

TDD 遵循的一般步骤是

TTD 步骤的流程图

TDD 允许开发人员测试他们对正在构建的特定功能的功能预期。例如,如果开发人员想要创建一个用户模型,他们可以构建一个测试来检查用户是否使用所需的参数创建。开发人员首先构建测试,运行这些测试,然后构建用户模型,再次运行测试直到通过,最后重构代码。TDD 就是这么简单!

什么是 RSpec?

RSpec 是一款领域特定语言 (DSL) 工具,用于用 Ruby 编写单元测试。需要注意的是,RSpec 属于行为驱动开发 (BDD),它是作为 TDD 的一个子类别创建的。您可以点击此处了解更多关于 BDD 的信息。

构建测试

步骤 1

构建 RSpec 测试时需要做的第一件事就是将rspec gem添加到您的Gemfile测试文件中,然后在您要编写测试的文件中使用它。

第 2 步:describe阻止

现在开始实际编写测试……我们需要编写的第一件事是describe代码块,它允许我们将测试分组为一个集合。该describe代码块允许我们告诉 RSpec 我们将测试哪个类,它接受类名或字符串作为参数。

描述块的代码片段

describe块是我们在 Ruby 中进行测试的父块,这意味着我们所有其他块和测试组件都将成为该块的子块。

步骤 3:context阻止

describe我们块中的第一个子块是contextblock,它也接受类名或字符串作为参数。虽然contextblock 不是 RSpec 测试的必需组件,但它们非常有用,有助于添加更多有关测试的详细信息。该context块允许您创建子组。这使得测试具有不同上下文的组变得更加容易,例如当用户登录或用户未登录时。

上下文块的代码片段

步骤 4:it阻止

该块的基本子块describeit块。it用于定义测试/测试用例的具体行为。与前两个块一样,它也接受类名或字符串作为参数,但通常只将字符串传递给块参数。通常,使用的字符串参数应包含“should”一词来描述测试的行为。

it 块的代码片段

换句话说,该it块描述了预期的结果,这让我想到了下一个主题,expect关键字。expect用于定义测试的期望并验证预期条件是否已经满足。

注意:本文我将介绍两个最常见的与 相关的关键词expect。在后续文章中,我将更详细地介绍其他可以在这里使用的关键词。

toeql

to关键字eql一起使用expect是为了验证测试是否输出了预期值。to的用法是,我们期望响应/消息某个值。eql此时发挥作用,因为它帮助我们完成预期语句的其余部分。我们期望响应等于某个值。

to并使eql语句expect易于阅读,就像正常的句子一样流畅。在这种情况下,expect(message).to eq “Hello World!”它听起来就像“期望消息等于 hello world!”

expect、it 和 eql 关键字的代码片段

注意:要确定相等性是否为假而不是真,可以使用关键字not_to代替to

最后的想法

好了,我们讲解了构成 RSpec 测试的最基本组件。我们讨论了构建 RSpec 测试的三个重要模块:describecontextit,以及可以在其中使用的关键字。

我希望读完本文后,您能更好地理解为什么我们在测试中使用不同的块和关键字。在本系列的后续文章中,我将介绍与expect关键字一起使用的其他方法以及其他 RSpec 方法,敬请期待。

注意:本周的封面图片来自爱尔兰康尼马拉(我的家人/家族的故乡)。

来源

RSpec 教程
权威的 RSpec 教程,包含示例,
介绍测试驱动开发 (TDD),
Ruby 的行为驱动开发。让 TDD 高效有趣。

文章来源:https://dev.to/torianne02/building-tests-in-ruby-the-basics-59mo
PREV
收到第一个报价
NEXT
给那些考虑转行的人的5个建议