📜  RSpec-匹配器(1)

📅  最后修改于: 2023-12-03 15:04:56.186000             🧑  作者: Mango

RSpec 匹配器

RSpec 是一个针对 Ruby 语言的行为驱动开发(BDD)框架,它允许开发者编写可读性强的测试用例,并且在运行测试时会输出详细的结果信息。匹配器是 RSpec 中用来判断预期结果与实际结果是否相符的一种工具。

常见匹配器
相等性匹配器

相等性匹配器用于判断预期值与实际值是否相等,包括:

  • eq:判断对象是否被认定为相等;
  • eql:判断对象是否相等且类型相同;
  • equal:判断对象是否为同一个对象。

示例代码:

expect("hello").to eq("hello")
expect(1 + 1).to eql(2)
expect("hello".upcase).not_to equal("hello")
比较运算符匹配器

比较运算符匹配器用于判断实际值是否大于、大于等于、小于、小于等于预期值,包括:

  • be > num:判断实际值是否大于 num;
  • be >= num:判断实际值是否大于等于 num;
  • be < num:判断实际值是否小于 num;
  • be <= num:判断实际值是否小于等于 num。

示例代码:

expect(5).to be > 0
expect("abc".length).to be <= 3
包含性匹配器

包含性匹配器用于判断集合中是否包含某元素,包括:

  • include:判断集合中是否包含某元素;
  • match:判断字符串是否匹配某正则表达式。

示例代码:

expect([1, 2, 3]).to include(2)
expect("hello").to match(/ll/)
真假值匹配器

真假值匹配器用于判断实际值是否等于 true 或 false,包括:

  • be_truthy:判断实际值是否等于 true;
  • be_falsey:判断实际值是否等于 false;
  • be_true:与 be_truthy 等效。

示例代码:

expect(1 == 1).to be_truthy
expect(1 == 2).to be_falsey
异常匹配器

异常匹配器用于判断代码块是否抛出了指定类型的异常,包括:

  • raise_error:判断代码块是否抛出异常;
  • raise_exception:与 raise_error 等效。

示例代码:

expect { 1 / 0 }.to raise_error(ZeroDivisionError)
自定义匹配器

在 RSpec 中,开发者可以根据需求自定义匹配器。自定义匹配器需要实现一个名为 matches? 的方法和一个名为 failure_message 的方法。

matches? 方法用于判断实际值是否符合预期,接收一个参数,即实际值,返回一个布尔值:

RSpec::Matchers.define :even_number do
  match do |actual|
    actual % 2 == 0
  end
end

failure_message 方法用于返回匹配不成功时的提示信息,接收一个参数,即实际值,返回一个字符串:

RSpec::Matchers.define :even_number do
  match do |actual|
    actual % 2 == 0
  end

  failure_message do |actual|
    "expected #{actual} to be even number"
  end
end

自定义匹配器可以增加代码的可读性和可维护性,使得测试用例更加精确。