如何为包含子字符串的字符串创建匹配器,同时忽略大小写

Jez*_*mon 5 dart dart-unittest dart-mock

我正在使用 mockito 编写一个单元测试来模拟依赖项并检查我们是否使用正确的参数调用它。我们应该传入一个字符串,因此我尝试匹配该函数参数,但不会对整个字符串进行断言,以防我们更改措辞。所以我只想匹配消息中的一个词,但该词可能位于句子的开头或中间,因此它可能以大写开头。

dart 匹配器具有equalsIgnoringCasecontains,但我找不到处理这两者的匹配器,例如 containsIgnoringCase。有没有办法检查子字符串,同时忽略匹配器中的大小写?

小智 15

您可以将正则表达式传递给属性设置为的contains方法。caseSensitivefalse

string.contains(new RegExp(r'your-substring', caseSensitive: false));
Run Code Online (Sandbox Code Playgroud)

  • 这不是 Dart 中指定 RegExp 标志的方式。您必须使用“RegExp(r'your-substring', caseSensitive: false)”来创建忽略大小写的正则表达式。 (2认同)

Lui*_*tto 2

由于OP更新了问题,限制它应该是一个Matcher(对于mockito):

可以使用任意代码创建匹配器predicate。在这种情况下,使用 Ajmal 的答案:

Matcher containsSubstringNoCase(String substring) =>
  predicate((String expected) => expected.contains(RegExp(substring, caseSensitive: false)));
Run Code Online (Sandbox Code Playgroud)

然后:

expect('Foo', containsSubstringNoCase('foo'));  // true
Run Code Online (Sandbox Code Playgroud)