📅  最后修改于: 2020-12-06 10:54:21             🧑  作者: Mango
让我们仔细看看我们的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
描述一词是RSpec关键字。它用于定义“示例组”。您可以将“示例组”视为测试的集合。 describe关键字可以带有类名和/或字符串参数。您还需要传递一个块参数来描述,它将包含单个测试,或者在RSpec中称为“示例”。该块只是由Ruby do / end关键字指定的Ruby块。
context关键字类似于describe 。它也可以接受类名和/或字符串参数。您还应该使用带有上下文的块。上下文的概念是它包含某种类型的测试。
例如,您可以指定具有不同上下文的示例组,如下所示:
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关键字不是必需的,但有助于添加有关它包含的示例的更多详细信息。
它是另一个RSpec关键字,用于定义“示例”。一个例子基本上是一个测试或一个测试案例。同样,与describe和context一样,它接受类名和字符串参数,并应与以do / end指定的块参数一起使用。在它的情况下,通常只传递一个字符串和块参数。字符串参数通常使用“应该”一词,用于描述应在it块内发生的特定行为。换句话说,它描述了预期结果是针对示例的。
注意我们的HelloWorld示例中的it块–
it "The say_hello method should return 'Hello World'" do
该字符串清楚地说明了当我们在HelloWorld类的实例上打个招呼时应该发生什么。 RSpec原理的这一部分,Example不仅是测试,还是规范(spec)。换句话说,一个Example既记录并测试了Ruby代码的预期行为。
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关键字,称为Matcher。您可以使用Matchers来指定要测试为真(或假)的条件类型。
在我们的HelloWorld Expect语句中,很显然eql表示字符串相等。请注意,Ruby中有不同类型的相等运算符,因此RSpec中有不同的对应Matchers。在后面的部分中,我们将探索许多不同类型的匹配器。