如何断言数组包含 JavaScript/TScript 中的子字符串
How to Assert a array contains a sub string in JavaScript/TScript
我正在尝试检查数组中是否存在 SubString。在测试中我断言使用:
expect(classList).toContain('Rail__focused')
我收到以下错误:
Error: expect(received).toContain(expected // indexOf
Expected value: "Rail__focused"
Received array: ["Rail__item__3NvGX", "Rail__focused__3bGTR", "Tile__tile__3jJYQ", "Tile__wide__1GuVb", "Tile__animated__3H87p", "Tile__active__1mtVd"]
这就是我想要实现并希望它通过
var arr = ["Rail__item__3NvGX", "Rail__focused__3bGTR", "Tile__tile__3jJYQ", "Tile__wide__1GuVb", "Tile__animated__3H87p", "Tile__active__1mtVd"];
var str = 'Rail__focused';
for (var i = 0, len = arr.length; i < len; ++i) {
if (str.indexOf(arr[i]) != -1) {
console.log("This is a pass")
} else {
console.log("This is a fail")
}
}
所以因为屏幕截图中有 Jest d.ts
- 我只是假设这是 Jest :)
.contain
does a strict ===
检查 - 所以这不适用于部分字符串。
例如,您可以搜索数组中的项目并断言它存在:
test('contain', () => {
const classList = [
'Rail__item__3NvGX',
'Rail__focused__3bGTR',
'Tile__tile__3jJYQ',
'Tile__wide__1GuVb',
'Tile__animated__3H87p',
'Tile__active__1mtVd',
];
expect(classList.find((el) => el.includes('Rail__focused'))).toBeDefined();
});
Array.find会return第一个满足回调结果的元素。它将 return undefined - 如果没有找到。
如果这是一项重复性任务 - 您可以写 custom matcher in Jest:
expect.extend({
toPartiallyContain(received, needle) {
const pass = received.find((el) => el.includes(needle));
if (pass) {
return {
message: () =>
`expected ${received} not to partially contain ${needle}`,
pass: true,
};
} else {
return {
message: () => `expected ${received} to partially contain ${needle}`,
pass: false,
};
}
},
});
test('contain with custom matcher', () => {
const classList = [
'Rail__item__3NvGX',
'Rail__focused__3bGTR',
'Tile__tile__3jJYQ',
'Tile__wide__1GuVb',
'Tile__animated__3H87p',
'Tile__active__1mtVd',
];
expect(classList).toPartiallyContain('Rail__focused');
expect(classList).not.toPartiallyContain('Hello');
});
您的示例没有测试断言:
var arr = ["Rail__item__3NvGX", "Rail__focused__3bGTR", "Tile__tile__3jJYQ", "Tile__wide__1GuVb", "Tile__animated__3H87p", "Tile__active__1mtVd"];
var str = 'Rail__focused';
console.log(arr.find((el) => el.includes(str)));
我正在尝试检查数组中是否存在 SubString。在测试中我断言使用:
expect(classList).toContain('Rail__focused')
我收到以下错误:
Error: expect(received).toContain(expected // indexOf
Expected value: "Rail__focused"
Received array: ["Rail__item__3NvGX", "Rail__focused__3bGTR", "Tile__tile__3jJYQ", "Tile__wide__1GuVb", "Tile__animated__3H87p", "Tile__active__1mtVd"]
这就是我想要实现并希望它通过
var arr = ["Rail__item__3NvGX", "Rail__focused__3bGTR", "Tile__tile__3jJYQ", "Tile__wide__1GuVb", "Tile__animated__3H87p", "Tile__active__1mtVd"];
var str = 'Rail__focused';
for (var i = 0, len = arr.length; i < len; ++i) {
if (str.indexOf(arr[i]) != -1) {
console.log("This is a pass")
} else {
console.log("This is a fail")
}
}
所以因为屏幕截图中有 Jest d.ts
- 我只是假设这是 Jest :)
.contain
does a strict ===
检查 - 所以这不适用于部分字符串。
例如,您可以搜索数组中的项目并断言它存在:
test('contain', () => {
const classList = [
'Rail__item__3NvGX',
'Rail__focused__3bGTR',
'Tile__tile__3jJYQ',
'Tile__wide__1GuVb',
'Tile__animated__3H87p',
'Tile__active__1mtVd',
];
expect(classList.find((el) => el.includes('Rail__focused'))).toBeDefined();
});
Array.find会return第一个满足回调结果的元素。它将 return undefined - 如果没有找到。
如果这是一项重复性任务 - 您可以写 custom matcher in Jest:
expect.extend({
toPartiallyContain(received, needle) {
const pass = received.find((el) => el.includes(needle));
if (pass) {
return {
message: () =>
`expected ${received} not to partially contain ${needle}`,
pass: true,
};
} else {
return {
message: () => `expected ${received} to partially contain ${needle}`,
pass: false,
};
}
},
});
test('contain with custom matcher', () => {
const classList = [
'Rail__item__3NvGX',
'Rail__focused__3bGTR',
'Tile__tile__3jJYQ',
'Tile__wide__1GuVb',
'Tile__animated__3H87p',
'Tile__active__1mtVd',
];
expect(classList).toPartiallyContain('Rail__focused');
expect(classList).not.toPartiallyContain('Hello');
});
您的示例没有测试断言:
var arr = ["Rail__item__3NvGX", "Rail__focused__3bGTR", "Tile__tile__3jJYQ", "Tile__wide__1GuVb", "Tile__animated__3H87p", "Tile__active__1mtVd"];
var str = 'Rail__focused';
console.log(arr.find((el) => el.includes(str)));