首页 > 其他分享 >无涯教程-RSpec - 过滤器

无涯教程-RSpec - 过滤器

时间:2023-11-19 14:31:48浏览次数:46  
标签:do seconds 无涯 RSpec expect rb 过滤器 spec

在阅读本节之前,您可能需要阅读有关RSpec元数据(Metadata)的部分,因为事实证明,RSpec筛选(Filtering)基于RSpec元数据。

假设您有一个spec文件,它包含两种类型的测试:正确测试和错误测试。让无涯教程这样定义它们-

RSpec.describe "An Example Group with positive and negative Examples" do 
   context 'when testing Ruby\'s build-in math library' do
      
      it 'can do normal numeric operations' do 
         expect(1 + 1).to eq(2) 
      end 
      
      it 'generates an error when expected' do
         expect{1/0}.to raise_error(ZeroDivisionError) 
      end
      
   end 
end

现在,将上面的文本保存为名为" filter_spec.rb"的文件,然后使用此命令运行-

rspec filter_spec.rb

您将看到看起来像这样的输出-

.. 
Finished in 0.003 seconds (files took 0.11201 seconds to load) 
2 examples, 0 failures

现在,如果只想重新运行此文件中的正确测试该怎么办?可以使用RSpec过滤器轻松地做到这一点。将上面的代码更改为此-

RSpec.describe "An Example Group with positive and negative Examples" do 
   context 'when testing Ruby\'s build-in math library' do
      
      it 'can do normal numeric operations', positive: true do 
         expect(1 + 1).to eq(2) 
      end 
      
      it 'generates an error when expected', negative: true do 
         expect{1/0}.to raise_error(ZeroDivisionError) 
      end
      
   end 
end

将更改保存到filter_spec.rb并运行此稍有不同的命令-

rspec --tag positive filter_spec.rb

现在,您将看到如下输出:

Run options: include {:positive=>true} 
. 
Finished in 0.001 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

通过指定--tag肯定,无涯教程告诉RSpec仅运行positive示例。可以通过运行以下命令对negative示例相同的操作-

rspec --tag negative filter_spec.rb

请记住,这些只是示例,您可以使用所需的任何名称指定过滤器。

RSpec 格式化程序

格式化程序允许RSpec以不同的方式显示测试的输出。创建一个包含以下代码的新RSpec文件-

RSpec.describe "A spec file to demonstrate how RSpec Formatters work" do 
   context 'when running some tests' do 
      
      it 'the test usually calls the expect() method at least once' do 
         expect(1 + 1).to eq(2) 
      end
      
   end 
end

现在,将其保存到名为formatter_spec.rb的文件中,然后运行此RSpec命令-

rspec formatter_spec.rb

您应该看到如下所示的输出-

. 
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

现在运行相同的命令,但是这次指定一个格式化程序,如下所示:

rspec --format progress formatter_spec.rb

这次您应该看到相同的输出-

. 
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

接下来尝试其他格式化程序,尝试运行此命令-

rspec --format doc formatter_spec.rb

现在您应该看到此输出-

A spec file to demonstrate how RSpec格式化程序 work 
   when running some tests 
      the test usually calls the expect() method at least once
Finished in 0.002 seconds (files took 0.11401 seconds to load) 
1 example, 0 failures

如您所见," doc"格式化程序的输出完全不同。此格式化程序以类似文档的样式显示输出。您可能想知道测试失败时的内容。让无涯教程将 formatter_spec.rb 中的代码更改为如下所示-

RSpec.describe "A spec file to demonstrate how RSpec Formatter work" do 
   context 'when running some tests' do 
      
      it 'the test usually calls the expect() method at least once' do 
         expect(1 + 1).to eq(1) 
      end
      
   end 
end

对eq(1)的期望 expect(1 +1),会失败。保存更改并重新运行以上命令-

rspec --format progress formatter_spec.rb ,请记住,由于" progress"格式化程序是默认格式,因此您可以运行: rspec formatter_spec.rb 。您应该看到此输出-

F 
Failures:
1) A spec file to demonstrate how RSpec Formatter work when running some tests 
the test usually calls the expect() method at least once
   Failure/Error: expect(1 + 1).to eq(1)
	
      expected: 1
         got: 2
			  
      (compared using ==)			  
   # ./formatter_spec.rb:4:in `block (3 levels) in <top (required)>'

Finished in 0.016 seconds (files took 0.11201 seconds to load)
1 example, 1 failure
Failed examples:

rspec ./formatter_spec.rb:3 # A spec file to demonstrate how RSpec 
   Formatters work when running some tests the test usually calls 
   the expect() method at least once

现在,让无涯教程尝试doc格式化程序,运行以下命令-

rspec --format doc formatter_spec.rb

现在,通过失败的测试,您应该看到此输出-

A spec file to demonstrate how RSpec Formatter work
   when running some tests
      the test usually calls the expect() method at least once (FAILED - 1)
		
Failures:

1) A spec file to demonstrate how RSpec Formatter work when running some
   tests the test usually calls the expect() method at least once
   Failure/Error: expect(1 + 1).to eq(1)
	
   expected: 1
        got: 2
		  
   (compared using ==)
   # ./formatter_spec.rb:4:in `block (3 levels) in <top (required)>'
	
Finished in 0.015 seconds (files took 0.11401 seconds to load) 
1 example, 1 failure

参考链接

https://www.learnfk.com/rspec/rspec-filtering.html

标签:do,seconds,无涯,RSpec,expect,rb,过滤器,spec
From: https://blog.51cto.com/u_14033984/8473221

相关文章

  • 使用Servlet中的过滤器实现登录权限验证
    {/***@description:登录过滤校验*@author:lijialuo*@date:2023/11/1913:28*@param:[servletRequest,servletResponse,filterChain]*@return:void**/@OverridepublicvoiddoFilter(ServletRequestservletReque......
  • 无涯教程-RSpec - 元数据
    RSpec是一种灵活而强大的工具。RSpec中的元数据(Metadata)函数也不例外。元数据通常指“关于数据的数据”。在RSpec中,这意味着有关您的描述,上下文及其块的数据,让无涯教程看一个例子-RSpec.describe"AnExampleGroupwithametadatavariable",:foo=>17docontext'an......
  • 无涯教程-RSpec - Subjects主题
    RSpecsubjets提供了编写简写测试用例的快捷方式。考虑以下代码-classPersonattr_reader:first_name,:last_namedefinitialize(first_name,last_name)@first_name=first_name@last_name=last_nameendenddescribePersondo......
  • 无涯教程-RSpec - Tags标签
    RSpecTags提供了一种在规范文件中运行特定测试的简便方法。假设您只想运行指定测试方法,则可以使用Tags标签实现。describe"HowtorunspecificExampleswithTags"doit'isaslowtest',:slow=>truedosleep10puts'Thistestisslow!'end......
  • Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
    Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器,互斥锁......
  • 无涯教程-RSpec - Stubs
    如果您已经阅读了RSpecDoubles部分,那么您已经看到了RSpecStubs,它是一种特殊类型的方法,代表现有方法或尚不存在的方法。这是RSpecDoubles部分中的代码-classClassRoomdefinitialize(students)@students=studentsEnddeflist_student_names......
  • 无涯教程-RSpec - 模拟对象
    在本章中,无涯教程将讨论RSpecDoubles,RSpecDouble是一个模拟对象,在代码中模拟系统的另一个对象,方便测试。假设您为学校构建一个应用程序,有一个教室,还有一个学生。类定义如下:classClassRoomdefinitialize(students)@students=studentsenddeflis......
  • 无涯教程-RSpec - 基本语法
    让无涯教程仔细看看HelloWorld示例的代码。首先,如果不清楚,正在测试HelloWorld类的函数。当然,这是一个非常简单的类,仅包含一个方法say_hello()。这又是RSpec代码-describeHelloWorlddocontext“WhentestingtheHelloWorldclass”doit"Thesay_......
  • 无涯教程-RSpec - 简介
    行为驱动开发(英语:Behavior-drivendevelopment,缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由DanNorth在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。在过去数年里,它得......
  • 无涯教程-D语言 - 封装
    封装是一种面向对象的编程概念,它将数据和将数据操作在一起的函数绑定在一起,并且可以确保不受外界干扰,封装导致了数据隐藏的重要OOP概念。一个类可以包含private,protected和public修饰符,默认情况下,类中定义的所有项目都是private私有的。如-classBox{public:......