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 “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 关键字,用于定义"示例"。 示例基本上是一个测试或测试用例。 同样,与 describecontext 一样,它 接受类名和字符串参数,并且应该与块参数一起使用,用 do/end 指定 。 对于 it 来说,通常只传递字符串和块参数。 字符串参数经常使用"should"一词,旨在描述 it 块 内应该发生什么特定行为。 换句话说,它描述了示例的预期结果。

注意 HelloWorld 示例中的 it 块

it "The say_hello method should return 'Hello World'" do

该字符串清楚地表明了当我们在 HelloWorld 类的实例上调用 say hello 时会发生什么。 RSpec 哲学的这一部分,示例不仅仅是一个测试,它也是一个规范(a spec)。 换句话说,示例既记录又测试 Ruby 代码的预期行为。

expect 关键字

expect 关键字用于定义 RSpec 中的"预期"。 这是一个验证步骤,我们检查是否满足特定的预期条件。

从我们的 HelloWorld 示例中,我们有 −

expect(message).to eql "Hello World!"

expect 语句的想法是它们读起来像普通英语。 您可以大声说出"期望变量消息等于字符串'Hello World'"。 这个想法是它具有描述性并且易于阅读,即使对于项目经理等非技术利益相关者来说也是如此。

The to keyword

to 关键字用作 expect 语句的一部分。 请注意,当您希望 Expectation 为 false 时,您还可以使用 not_to 关键字来表达相反的意思。 您可以看到 to 与点一起使用,expect(message).to, 因为它实际上只是一个常规的 Ruby 方法。 事实上,所有 RSpec 关键字实际上只是 Ruby 方法。

The eql keyword

eql 关键字是一个特殊的 RSpec 关键字,称为匹配器。 您可以使用匹配器来指定要测试的条件类型为真(或假)。

在我们的HelloWorld expect语句中,很明显eql表示字符串相等。 请注意,Ruby 中存在不同类型的相等运算符,因此 RSpec 中对应的匹配器也不同。 我们将在后面的部分中探讨许多不同类型的匹配器。