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 这个词是RSpec关键字.它用于定义"示例组".您可以将"示例组"视为一组测试. describe 关键字可以采用类名和/或字符串参数.您还需要将块参数传递给 describe ,这将包含各个测试,或者在RSpec中已知的"示例".该块只是由Ruby do/end 关键字指定的Ruby块.

上下文关键字

context 关键字类似于 describe .它也可以接受类名和/或字符串参数.您也应该使用带 context 的块.上下文的概念是它包含某种类型的测试.

例如,您可以指定具有不同上下文的示例组,例如this :

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 是另一个RSpec关键字,用于定义"例".一个例子基本上是测试或测试用例.再次,如 describe 上下文,它接受类名和字符串参数,并应与块参数一起使用,用 do/end 指定.在 it 的情况下,通常只传递字符串和块参数.字符串参数通常使用单词"should",用于描述 it块中应该发生的具体行为.换句话说,它描述了预期结果是针对示例的.

注意它阻止来自我们的HelloWorld示例 :

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

该字符串清楚说明了什么当我们在HelloWorld类的实例上调用hello时会发生这种情况.这部分RSpec哲学,一个例子不仅仅是一个测试,它也是一个规范(一个规范).换句话说,一个示例文档和测试Ruby代码的预期行为.

期望关键字

期望 keyword用于在RSpec中定义"期望".这是一个验证步骤,我们检查是否已达到特定的预期条件.

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

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

期待语句的想法是它们读起来像普通英语.您可以大声说出"预期变量消息等于字符串'Hello World'".这个想法是它的描述性和易读性,即使是非技术性的利益相关者,如项目经理.

The to keyword

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

The eql keyword

eql 关键字是一个特殊的RSpec关键字,称为匹配器.您使用Matchers指定您测试的条件类型为true(或false).

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