https://github.com/rspec/rspec-expectations

https://relishapp.com/rspec/rspec-expectations/v/3-7/docs

总文档连接:

RSpec.info/documentation/

be_completed是Predicate matchers

expect(actual).to be_xxx  #passes if actual.xxx?


RSpec::Expectations lets you express expected outcomes on an object in an example.

Built-in matchers

expect(actual_value).to eq(expected_value)

expect(actual_value).to be >= expected_value   包括>, < , <=, >=

expect(actual_value).to match(/expression/)  正则表达式(expect不支持匹配符号 =~)

expect(array).to all(inner_matcher)    #让array通过inner_matcher

如:expect([1,2,3]).to all(be_truthy)

expect(array).to contain_exactly(expected_array) #如果实际的和期待的数组包含相同的元素,则期待成功。不考虑顺序。

contain_exactly等同于match_array

expect(actual).to exist

Collection membership

expect(actual).to include(expected)  #actual可以是数组,字符串,hash.

例子:expect([1,2,3]).to include(1,2), expect({:a => "b"}).to include(:a => "b")

include的变型, start_with, end_with

Types/classes

expect(actual).to be_an_instance_of(expected)

# passes if actual.class == expected

expect(actual).to be_a(expected)  #passes if actual.kind_of?(expected)

Predicate matchers 

expect(actual).to be_xxx   #passes if actual.xxx?

expect(actual).to have_xxx(:arg) #passes if actual.has_xxx?(:arg)

expect(actual).to have_attributes(key/value pairs)

Truthiness

expect(actual).to be_truthy/falsy     # passes if actual is truthy (not nil or false)

expect(actual).to be true/false  #passes if actual == true/false

expect(actual).to be_nil   #passes if actual is nil

expect(actual).to_not be_nil   #passes if actual is not nil

Ranges

expect(1..10).to cover(3)

expect(actual).to be_between(min, max)

Expecting errors

expect { ... }.to raise_error
expect { ... }.to raise_error(ErrorClass)
expect { ... }.to raise_error("message")
expect { ... }.to raise_error(ErrorClass, "message")

expect可以用于block也可以用于value expectations.

Expecting throws and Yielding没看懂⚠️

Compound Matcher Expressions

通过user,or可以创建混合匹配表达式 。

expect(stoplight.color).to eq("red").or eq("green").or eq("yellow")

expect(alphabet).to start_with("a").and end_with("z")

Composing Matchers

以下matchers接受matchers 作为参数。

  • change().by(matcher) #改变sth等于by(匹配的值)
  • change{}.from(mather).to(matcher) #改变sth,从matcher_val到mather_val
  • include(matcher, matcher)
  • include(:key => matcher, :other => mathcer)
 等等:详细见https://relishapp.com/rspec/rspec-expectations/v/3-7/docs/composing-matchers

‘change’ matcher:

  • expect {do_sth}.to change(object, :attribute)
  • expect {do_sth}.to change{object.attribute}
  • 可以联合  from().to();  by(), by_at_least(), by_at_most()

Relish(n:great enjoyment; 水果蔬菜酱) 案例连接

库: rspec/rspec-expectations matcher匹配器常用的更多相关文章

  1. Matcher匹配器查找字符串指定内容

    public static void main(String[] args) { String s = "我的手机号码是18988888888,曾经用过18987654321,还用过1881 ...

  2. Rust 1.7.0 匹配器 match 的简介和使用

    使用过正則表達式的人应该都知道 matcher ,通过 matcher 匹配器运算正則表達式,完毕一系列的匹配规则. 在Rust 中 没有 switch 语句.matcher 就是 switch 的一 ...

  3. Rspec: everyday-rspec实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章

    总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...

  4. Junit 断言 assertThat Hamcrest匹配器

    junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...

  5. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  6. Flask入门之自定义过滤器(匹配器)

    1.  动态路由的匹配器? 不知道这种叫啥名,啥用法,暂且叫做匹配器吧. Flask自带的匹配器可以说有四种吧(保守数字,就我学到的) 动态路由本身,可以传任何参数字符串或者数字,如:<user ...

  7. 【Jest】笔记二:Matchers匹配器

    一.前言 什么是匹配器? 我们可以把匹配器看成,testng断言,这么理解就可以了 二.常用的匹配器 test('two plus two is four', () => { expect(2 ...

  8. Mockito 2 参数匹配器

    Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值.有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers). 请参考下面的 ...

  9. Hamcrest匹配器框架

    其实在之前的文章中已经使用过 Hamcrest 匹配器框架,本篇文章将系统的介绍它的使用. 为什么要用Hamcrest匹配器框架 Hamcrest是一款软件测试框架, 可以通过现有的匹配器类检查代码中 ...

随机推荐

  1. javashop组件开发指南

    javashop组件开发指南 1.      概念解释 组件:可以理解为是插件,功能点的一个集合. 插件:是指具体的某个功能. 插件桩:是负责调用插件. 事件:是要决定什么时候执行插件 一个组件是由多 ...

  2. php new stdClass array 实例代码

    php new stdClass array 实例代码 $searchResults = array ();// //$obj = array ("rs"=>array(), ...

  3. MySQL数据库----单表查询

    先创建表 #创建表 create table employee( id int not null unique auto_increment, name varchar(20) not null, s ...

  4. Windows下MongoDB安装

    1.解压mongodb-win32-i386-1.8.1.zip ,创建路径d:\mongodb ,将解压后的Bin文件Copy to 此文件夹下 2.d:\mongodb 下建立Data文件夹 d: ...

  5. ACM题目————区间覆盖问题

    题目描述 设x1 , x2,... , xn是实直线上的n个点.用固定长度的闭区间覆盖这n个点,至少需要多少个这样的固定长度闭区间?设计解此问题的有效算法,并证明算法的正确性.编程任务:对于给定的实直 ...

  6. 使用基于 PHP 的开源软件 YOURLS 搭建短链接地址服务

    使用基于 PHP 的开源软件 YOURLS搭建 系统配置 php7.1+mysql5.7+nginx 下载源代码 git clone https://github.com/YOURLS/YOURLS. ...

  7. Python Web学习笔记之GIL机制下的鸡肋多线程

    为什么有人会说 Python 多线程是鸡肋?知乎上有人提出这样一个问题,在我们常识中,多进程.多线程都是通过并发的方式充分利用硬件资源提高程序的运行效率,怎么在 Python 中反而成了鸡肋? 有同学 ...

  8. Linux系统的vi命令

    Linux系统的vi命令 vi编辑命令 1,格式: #vi filename 2,用法: //打开或新建文件,并将光标置于第一行首 #vi + filename //打开文件,并将光标置于第n行首 # ...

  9. c++编程和c在思想上最大的差别

    从正规的血统上来说,c++跟java一样是面向对象编程语言,而c是面向结构的编程语言.但是,在现实中,有大量的系统虽然用cpp编写,但是100%跟java一样,使用面向对象的几乎没有,绝大部分都是结合 ...

  10. 20145122 《Java程序设计》第十周学习总结

    学习内容总结 网络编程 (1)网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. (2)程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. (3 ...