Files
core/tests/helpers/node-expect.js
T

108 lines
2.7 KiB
JavaScript
Raw Normal View History

import assert from 'node:assert/strict';
function toContain(arrayLike, expected) {
if (!Array.isArray(arrayLike) && typeof arrayLike !== 'string') {
throw new assert.AssertionError({ message: 'toContain expects array or string' });
}
if (typeof arrayLike === 'string') {
assert.equal(arrayLike.includes(String(expected)), true);
return;
}
assert.equal(arrayLike.includes(expected), true);
}
function toContainEqual(arrayLike, expected) {
assert.equal(Array.isArray(arrayLike), true);
const found = arrayLike.some((entry) => {
try {
if (expected && expected.__matcher === 'objectContaining') {
for (const [key, value] of Object.entries(expected.value || {})) {
assert.deepEqual(entry?.[key], value);
}
} else {
assert.deepEqual(entry, expected);
}
return true;
} catch {
return false;
}
});
assert.equal(found, true);
}
function toHaveProperty(value, key) {
assert.equal(value != null, true);
assert.equal(Object.prototype.hasOwnProperty.call(value, key), true);
}
export function expect(actual) {
const api = {
toBe(expected) {
assert.equal(actual, expected);
},
toBeDefined() {
assert.notEqual(actual, undefined);
},
toBeNull() {
assert.equal(actual, null);
},
toBeGreaterThan(expected) {
assert.equal(Number(actual) > Number(expected), true);
},
toBeLessThan(expected) {
assert.equal(Number(actual) < Number(expected), true);
},
toBeLessThanOrEqual(expected) {
assert.equal(Number(actual) <= Number(expected), true);
},
toContain(expected) {
toContain(actual, expected);
},
toContainEqual(expected) {
toContainEqual(actual, expected);
},
toHaveProperty(key) {
toHaveProperty(actual, key);
},
not: {
toContain(expected) {
if (typeof actual === 'string') {
assert.equal(actual.includes(String(expected)), false);
return;
}
assert.equal(Array.isArray(actual), true);
assert.equal(actual.includes(expected), false);
}
}
};
Object.defineProperty(api, 'rejects', {
get() {
return {
async toThrow(expectedMessage) {
let thrown = null;
try {
await actual;
} catch (error) {
thrown = error;
}
assert.notEqual(thrown, null);
if (expectedMessage !== undefined) {
const text = String(thrown?.message || thrown || '');
assert.equal(text.includes(String(expectedMessage)), true);
}
}
};
}
});
return api;
}
expect.objectContaining = function objectContaining(value) {
return {
__matcher: 'objectContaining',
value
};
};