RSpec – 编写规范

RSpec – 编写规范


在本章中,我们将创建一个新的 Ruby 类,将其保存在自己的文件中,并创建一个单独的规范文件来测试这个类。

首先,在我们的新类中,它被称为StringAnalyzer这是一个简单的类,你猜对了,它分析字符串。我们班只有一个方法has_vowels?顾名思义,如果字符串包含元音,则返回 true,否则返回 false。这是StringAnalyzer的实现

class StringAnalyzer 
   def has_vowels?(str) 
      !!(str =~ /[aeio]+/i) 
   end 
end

如果您遵循了 HelloWorld 部分,则会创建一个名为 C:\rspec_tutorial\spec 的文件夹。

删除 hello_world.rb 文件(如果有)并将上面的 StringAnalyzer 代码保存到 C:\rspec_tutorial\spec 文件夹中名为 string_analyzer.rb 的文件中。

这是我们测试 StringAnalyzer 的规范文件的来源 –

require 'string_analyzer' 

describe StringAnalyzer do 
   context "With valid input" do 
      
      it "should detect when a string contains vowels" do 
         sa = StringAnalyzer.new 
         test_string = 'uuu' 
         expect(sa.has_vowels? test_string).to be true 
      end 
		
      it "should detect when a string doesn't contain vowels" do 
         sa = StringAnalyzer.new 
         test_string = 'bcdfg' 
         expect(sa.has_vowels? test_string).to be false
      end 
      
   end 
end

将其保存在同一规范目录中,并命名为 string_analyzer_test.rb。

在 cmd.exe 窗口中,cd 到 C:\rspec_tutorial 文件夹并运行以下命令:dir spec

您应该看到以下内容 –

C:\rspec_tutorial\spec 目录

09/13/2015 08:22 AM  <DIR>    .
09/13/2015 08:22 AM  <DIR>    ..
09/12/2015 11:44 PM                 81 string_analyzer.rb
09/12/2015 11:46 PM              451 string_analyzer_test.rb

现在我们要运行我们的测试,运行这个命令:rspec spec

当您将文件夹的名称传递给rspec 时,它会运行该文件夹内的所有规范文件。你应该看到这个结果 –

No examples found.

Finished in 0 seconds (files took 0.068 seconds to load)
0 examples, 0 failures

发生这种情况的原因是,默认情况下,rspec只运行名称以“_spec.rb”结尾的文件。将 string_analyzer_test.rb 重命名为 string_analyzer_spec.rb。您可以通过运行此命令轻松做到这一点 –

ren spec\string_analyzer_test.rb string_analyzer_spec.rb

现在,再次运行rspec spec,您应该会看到如下所示的输出 –

F.
Failures:

   1) StringAnalyzer With valid input should detect when a string contains vowels
      Failure/Error: expect(sa.has_vowels? test_string).to be true 
         expected true
            got false
      # ./spec/string_analyzer_spec.rb:9:in `block (3 levels) in <top (required)>'

Finished in 0.015 seconds (files took 0.12201 seconds to load)
2 examples, 1 failure

Failed examples:
rspec ./spec/string_analyzer_spec.rb:6 # StringAnalyzer With valid 
   input should detect when a string contains vowels
Do you see what just happened? Our spec failed because we have a bug in 
   StringAnalyzer. The bug is simple to fix, open up string_analyzer.rb
   in a text editor and change this line:
!!(str =~ /[aeio]+/i)
to this:
!!(str =~ /[aeiou]+/i)

现在,保存您刚刚在 string_analyizer.rb 中所做的更改并再次运行 rspec spec 命令,您现在应该看到如下所示的输出 –

..
Finished in 0.002 seconds (files took 0.11401 seconds to load)
2 examples, 0 failures

恭喜,您的规范文件中的示例(测试)现已通过。我们修复了具有元音方法的正则表达式中的错误,但我们的测试远未完成。

添加更多示例以使用 has 元音方法测试各种类型的输入字符串是有意义的。

下表显示了一些可以添加到新示例中的排列(它阻止)

Input string 描述 has_vowels 的预期结果?
‘aaa’, ‘eee’, ‘iii’, ‘o’ 只有一个元音,没有其他字母。 真的
‘abcefg’ ‘至少一个元音和一些辅音’ 真的
‘mnklp’ 只有辅音。 错误的
‘’ 空字符串(无字母) 错误的
‘abcde55345&??’ 元音、辅音、数字和标点符号。 真的
‘423432%%%^&’ 仅限数字和标点符号。 错误的
‘AEIOU’ 仅大写元音。 真的
‘AeiOuuuA’ 仅大写和小元音。 真的
‘AbCdEfghI’ 大小写元音和辅音。 真的
‘BCDFG’ 仅大写辅音。 错误的
‘ ‘ 仅限空白字符。 错误的

由您决定将哪些示例添加到您的规范文件中。有许多条件需要测试,您需要确定哪些条件子集最重要并最好地测试您的代码。

rspec的命令提供了许多不同的选择,一饱眼福,键入rspec的-help。下表列出了最流行的选项并描述了它们的作用。

Sr.No. 选项/标志和说明
1

-I PATH

将 PATH 添加到rspec在查找 Ruby 源文件时使用的加载(需要)路径

2

-r, –require PATH

添加规范中需要的特定源文件。文件。

3

–fail-fast

使用此选项,rspec 将在第一个示例失败后停止运行规范。默认情况下, rspec 运行所有指定的规范文件,无论有多少失败。

4

-f, –format FORMATTER

此选项允许您指定不同的输出格式。有关输出格式的更多详细信息,请参阅格式化程序部分。

5

-o, –out FILE

此选项指示 rspec 将测试结果写入输出文件 FILE 而不是标准输出。

6

-c, –color

在 rspec 的输出中启用颜色。成功示例结果将以绿色文本显示,失败将以红色文本打印。

7

-b, –backtrace

在 rspec 的输出中显示完整的错误回溯。

8

-w, –warnings

在 rspec 的输出中显示 Ruby 警告。

9

-P, –pattern PATTERN

加载并运行与模式 PATTERN 匹配的规范文件。例如,如果您传递 -p “*.rb”,rspec 将运行所有 Ruby 文件,而不仅仅是以“_spec.rb”结尾的文件。

10

-e, –example STRING

此选项指示 rspec 运行所有在其描述中包含文本 STRING 的示例。

11

-t, –tag TAG

使用此选项,rspec 将仅运行包含标签 TAG 的示例。请注意,TAG 被指定为 Ruby 符号。有关更多详细信息,请参阅 RSpec 标签部分。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁