模块: RSpec::Matchers::DSL

包含于
RSpec::Matchers
定义于
lib/rspec/matchers/dsl.rb

概述

定义自定义匹配器 DSL。

定义于命名空间

模块: DefaultImplementations, Macros 类: Matcher

实例方法概要 收起

实例方法详情

#alias_matcher(new_name, old_name, options = {}) ⇒Object

定义匹配器别名。返回的匹配器的 description 将被覆盖以反映新名称的措辞,该名称将在作为复合匹配器表达式中另一个匹配器的参数传递时用于失败消息。

示例

RSpec::Matchers.alias_matcher :a_list_that_sums_to, :sum_to
sum_to(3).description # => "sum to 3"
a_list_that_sums_to(3).description # => "a list that sums to 3"
RSpec::Matchers.alias_matcher :a_list_sorted_by, :be_sorted_by do |description|
  description.sub("be sorted by", "a list sorted by")
end
be_sorted_by(:age).description # => "be sorted by age"
a_list_sorted_by(:age).description # => "a list sorted by age"

参数

  • new_name (Symbol)

    匹配器的新名称

  • old_name (Symbol)

    匹配器的原始名称

  • options (Hash) (默认值: {})

    别名匹配器的选项

选项哈希 (选项):

  • :klass (Class)

    用作装饰器的 ruby 类。 (通常不使用)。

收益

  • (String)

    可选的块,如果给出,则用于定义被覆盖的逻辑。 产生的参数是原始描述或失败消息。 如果没有提供块,则将使用基于旧名称和新名称的默认覆盖。

另请参见

32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rspec/matchers/dsl.rb', line 32
def alias_matcher(new_name, old_name, options={}, &description_override)
  description_override ||= lambda do |old_desc|
    old_desc.gsub(EnglishPhrasing.split_words(old_name), EnglishPhrasing.split_words(new_name))
  end
  klass = options.fetch(:klass) { AliasedMatcher }
  define_method(new_name) do |*args, &block|
    matcher = __send__(old_name, *args, &block)
    matcher.matcher_name = new_name if matcher.respond_to?(:matcher_name=)
    klass.new(matcher, description_override)
  end
  ruby2_keywords new_name if respond_to?(:ruby2_keywords, true)
end

#define(name) {|Object| ... } ⇒Object 也称为: matcher

定义自定义匹配器。

参数

  • name (Symbol)

    匹配器的名称

收益

  • (Object)

    用于定义匹配器的块。 块在自定义匹配器类上下文中进行评估。 当参数传递给匹配器时,它们将在这里产生,通常表示预期值。

另请参见

73
74
75
76
77
78
# File 'lib/rspec/matchers/dsl.rb', line 73
def define(name, &declarations)
  warn_about_block_args(name, declarations)
  define_method name do |*expected, &block_arg|
    RSpec::Matchers::DSL::Matcher.new(name, declarations, self, *expected, &block_arg)
  end
end

#define_negated_matcher(negated_name, base_name) {|String| ... } ⇒Object

定义否定匹配器。 返回的匹配器的 descriptionfailure_message 将被覆盖以反映新名称的措辞,并且匹配逻辑将基于原始匹配器,但被否定。

示例

RSpec::Matchers.define_negated_matcher :exclude, :include
include(1, 2).description # => "include 1 and 2"
exclude(1, 2).description # => "exclude 1 and 2"

参数

  • negated_name (Symbol)

    否定匹配器的名称

  • base_name (Symbol)

    将被否定的原始匹配器的名称

收益

  • (String)

    可选的块,如果给出,则用于定义被覆盖的逻辑。 产生的参数是原始描述或失败消息。 如果没有提供块,则将使用基于旧名称和新名称的默认覆盖。

另请参见

61
62
63
# File 'lib/rspec/matchers/dsl.rb', line 61
def define_negated_matcher(negated_name, base_name, &description_override)
  alias_matcher(negated_name, base_name, :klass => AliasedNegatedMatcher, &description_override)
end