我有一组字符串['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)
有优雅的方法来测试吗?
答案 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',
]);
您可能希望使其适应您的代码。