chai检查字符串数组是否包含子集字符串

时间:2017-02-08 12:56:29

标签: chai

我有一组字符串['abc,'def','ghi','jkl']

我的字符串B等于'j'

我想检查数组中的任何元素是否将字符串B作为带有chai的子字符串

这可能吗?我似乎无法弄清楚如何使用chai中的.any来测试数组匹配中的每个元素

我尝试过很多东西,包括但不限于:

expect(array).any.to.contain(string)
expect(array).any.to.have.string(string)
expect(array)to.have.any.string(string)

有优雅的方法来测试吗?

3 个答案:

答案 0 :(得分:1)

您可能想要使用include方法:

expect(array).to.include('string')

答案 1 :(得分:1)

有两种方法可以实现此目标,具体取决于您的搜索条件。

如果要查找单个字符(如示例中所示),则可以连接数组字符串,然后检查包含该字符的结果字符串。如果您要查找多字符字符串,则此方法可能无法正常工作,因为您可以选择一个条目的结尾并成为下一个条目的开头。如果您知道字符串永远不会包含给定字符,则可以引入定界符。

expect(array.join()).to.include(single_character);
// or assuming your array will never include pipe (|)
expect(array.join('|').to.include(string);

或者,您可以使用.some()方法搜索数组并断言结果为true。

expect(array.some(x => x.includes(string)).to.be.true;

答案 2 :(得分:0)

通过阅读一些先前的答案来了解此帮助器函数的断言:

/**
 * Tests the schema errors and evaluates if a substring is contained within the errors.
 * @param validData - Data to be validated.
 * @param substring - Evaluated substring.
 * @param message - Mocha assertion message.
 * @returns {void}
 */
function expectSchemaErrorsToContain(validData: any, substrings: readonly string[], message?: string): void {
  const errors: string[] = getSchemaErrors(validData, dataSchema);
  const stringifiedErrors = JSON.stringify(errors, null, 0);
  for (const substring of substrings) {
    expect(stringifiedErrors, message).to.include(substring);
  }
  // Non-substring alternative:
  // expect(getSchemaErrors(validData, dataSchema)).to.include.members(substrings);
}

这是一个简单的例子:

_.set(validData, 'db', {});
expectSchemaErrorsToContain(validData, [
  '/db/connectionString is a required field',
  '/db/dbName is a required field',
]);

您可能希望使其适应您的代码。