- RSpec 教程
- RSpec - 首页
- RSpec - 简介
- RSpec - 基本语法
- RSpec - 编写规范
- RSpec - 匹配器
- RSpec - 测试替身
- RSpec - 存根
- RSpec - 钩子
- RSpec - 标签
- RSpec - 主题
- RSpec - 助手
- RSpec - 元数据
- RSpec - 过滤
- RSpec - 期望
- RSpec 资源
- RSpec - 快速指南
- RSpec - 有用资源
- RSpec - 讨论
RSpec - 基本语法
让我们仔细看看HelloWorld示例的代码。首先,如果尚不清楚,我们正在测试HelloWorld类的功能。当然,这是一个非常简单的类,只包含一个方法say_hello()。
以下是 RSpec 代码:
describe HelloWorld do context “When testing the HelloWorld class” do it "The say_hello method should return 'Hello World'" do hw = HelloWorld.new message = hw.say_hello expect(message).to eq "Hello World!" end end end
describe 关键字
describe是 RSpec 的一个关键字。它用于定义“示例组”。您可以将“示例组”视为测试的集合。describe关键字可以接受类名和/或字符串参数。您还需要将块参数传递给describe,其中将包含各个测试,或者像在 RSpec 中称为“示例”。块只是由 Ruby do/end关键字指定的 Ruby 块。
context 关键字
context关键字类似于describe。它也可以接受类名和/或字符串参数。您也应该在context中使用块。context 的理念是它包含特定类型的测试。
例如,您可以像这样指定具有不同上下文的示例组:
context “When passing bad parameters to the foobar() method” context “When passing valid parameters to the foobar() method” context “When testing corner cases with the foobar() method”
context关键字不是必需的,但它有助于添加有关其包含的示例的更多详细信息。
it 关键字
it是另一个 RSpec 关键字,用于定义“示例”。示例基本上是一个测试或一个测试用例。同样,像describe和context一样,it接受类名和字符串参数,并且应该与块参数一起使用,用do/end指定。在it的情况下,通常只传递字符串和块参数。字符串参数通常使用“should”一词,旨在描述it 块内部应该发生什么特定行为。换句话说,它描述了示例的预期结果。
请注意来自我们的 HelloWorld 示例的it 块:
it "The say_hello method should return 'Hello World'" do
该字符串清楚地说明了当我们在 HelloWorld 类的实例上调用 say hello 时应该发生什么。RSpec 哲学的一部分,示例不仅仅是测试,它也是规范(规范)。换句话说,示例既记录又测试了 Ruby 代码的预期行为。
expect 关键字
expect关键字用于在 RSpec 中定义“期望”。这是一个验证步骤,我们在此检查是否满足特定预期条件。
从我们的 HelloWorld 示例中,我们有:
expect(message).to eql "Hello World!"
expect语句的理念是它们读起来像普通的英语。您可以大声朗读为“期望变量 message 等于字符串‘Hello World’”。其理念是它具有描述性并且易于阅读,即使对于非技术利益相关者(如项目经理)也是如此。
The to keyword
to关键字用作expect语句的一部分。请注意,您还可以使用not_to关键字来表达相反的意思,当您希望期望为假时。您可以看到 to 与点一起使用,expect(message).to, 因为它实际上只是一个普通的 Ruby 方法。事实上,所有 RSpec 关键字实际上都只是 Ruby 方法。
The eql keyword
eql关键字是一个称为匹配器的特殊 RSpec 关键字。您使用匹配器来指定您正在测试哪种类型的条件为真(或假)。
在我们的 HelloWorld expect语句中,很明显eql表示字符串相等。请注意,Ruby 中有不同类型的等号运算符,因此 RSpec 中有不同的相应匹配器。我们将在后面的章节中探讨许多不同类型的匹配器。