@xylabs/vitest-extended 4.4.5 → 4.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,67 +1,26 @@
|
|
|
1
|
+
interface ExpectationResult {
|
|
2
|
+
actual?: unknown;
|
|
3
|
+
expected?: unknown;
|
|
4
|
+
message: () => string;
|
|
5
|
+
pass: boolean;
|
|
6
|
+
}
|
|
1
7
|
export declare const matchers: {
|
|
2
|
-
toBeArrayOfSize(received: unknown, expectedSize: number):
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
toBePositive(received: number): {
|
|
19
|
-
pass: boolean;
|
|
20
|
-
message: () => string;
|
|
21
|
-
};
|
|
22
|
-
toBeNumber: (received: unknown) => {
|
|
23
|
-
message: () => string;
|
|
24
|
-
pass: boolean;
|
|
25
|
-
};
|
|
26
|
-
toBeFunction: (received: unknown) => {
|
|
27
|
-
message: () => string;
|
|
28
|
-
pass: boolean;
|
|
29
|
-
};
|
|
30
|
-
toBeString: (received: unknown) => {
|
|
31
|
-
message: () => string;
|
|
32
|
-
pass: boolean;
|
|
33
|
-
};
|
|
34
|
-
toBeObject(received: unknown): {
|
|
35
|
-
message: () => string;
|
|
36
|
-
pass: boolean;
|
|
37
|
-
};
|
|
38
|
-
toBeInteger(received: number): {
|
|
39
|
-
pass: boolean;
|
|
40
|
-
message: () => string;
|
|
41
|
-
};
|
|
42
|
-
toBeFalse(received: unknown): {
|
|
43
|
-
message: () => string;
|
|
44
|
-
pass: boolean;
|
|
45
|
-
};
|
|
46
|
-
toBeTrue(received: unknown): {
|
|
47
|
-
message: () => string;
|
|
48
|
-
pass: boolean;
|
|
49
|
-
};
|
|
50
|
-
toIncludeAllMembers(received: unknown[], expected: unknown[]): {
|
|
51
|
-
pass: boolean;
|
|
52
|
-
message: () => string;
|
|
53
|
-
};
|
|
54
|
-
toContainAllKeys(received: object, expectedKeys: string[]): {
|
|
55
|
-
pass: boolean;
|
|
56
|
-
message: () => string;
|
|
57
|
-
};
|
|
58
|
-
toContainValues(received: object, expectedValues: unknown[]): {
|
|
59
|
-
pass: boolean;
|
|
60
|
-
message: () => string;
|
|
61
|
-
};
|
|
62
|
-
toBeEmpty(received: unknown): {
|
|
63
|
-
pass: boolean;
|
|
64
|
-
message: () => string;
|
|
65
|
-
};
|
|
8
|
+
toBeArrayOfSize(received: unknown, expectedSize: number): ExpectationResult;
|
|
9
|
+
toBeArray(received: unknown): ExpectationResult;
|
|
10
|
+
toBeOneOf(received: unknown, expected: unknown[]): ExpectationResult;
|
|
11
|
+
toBeNegative(received: number): ExpectationResult;
|
|
12
|
+
toBePositive(received: number): ExpectationResult;
|
|
13
|
+
toBeNumber: (received: unknown) => ExpectationResult;
|
|
14
|
+
toBeFunction: (received: unknown) => ExpectationResult;
|
|
15
|
+
toBeString: (received: unknown) => ExpectationResult;
|
|
16
|
+
toBeObject(received: unknown): ExpectationResult;
|
|
17
|
+
toBeInteger(received: number): ExpectationResult;
|
|
18
|
+
toBeFalse(received: unknown): ExpectationResult;
|
|
19
|
+
toBeTrue(received: unknown): ExpectationResult;
|
|
20
|
+
toIncludeAllMembers(received: unknown[], expected: unknown[]): ExpectationResult;
|
|
21
|
+
toContainAllKeys(received: object, expectedKeys: string[]): ExpectationResult;
|
|
22
|
+
toContainValues(received: object, expectedValues: unknown[]): ExpectationResult;
|
|
23
|
+
toBeEmpty(received: unknown): ExpectationResult;
|
|
66
24
|
};
|
|
25
|
+
export {};
|
|
67
26
|
//# sourceMappingURL=customMatchers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customMatchers.d.ts","sourceRoot":"","sources":["../../src/customMatchers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"customMatchers.d.ts","sourceRoot":"","sources":["../../src/customMatchers.ts"],"names":[],"mappings":"AAEA,UAAU,iBAAiB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,MAAM,MAAM,CAAA;IACrB,IAAI,EAAE,OAAO,CAAA;CACd;AAeD,eAAO,MAAM,QAAQ;8BACO,OAAO,gBAAgB,MAAM,GAAG,iBAAiB;wBAcvD,OAAO,GAAG,iBAAiB;wBAY3B,OAAO,YAAY,OAAO,EAAE,GAAG,iBAAiB;2BAc7C,MAAM,GAAG,iBAAiB;2BAkB1B,MAAM,GAAG,iBAAiB;2BAkB1B,OAAO;6BACL,OAAO;2BACT,OAAO;yBACT,OAAO,GAAG,iBAAiB;0BAY1B,MAAM,GAAG,iBAAiB;wBAkB5B,OAAO,GAAG,iBAAiB;uBAY5B,OAAO,GAAG,iBAAiB;kCAYhB,OAAO,EAAE,YAAY,OAAO,EAAE,GAAG,iBAAiB;+BAwBrD,MAAM,gBAAgB,MAAM,EAAE,GAAG,iBAAiB;8BA+BnD,MAAM,kBAAkB,OAAO,EAAE,GAAG,iBAAiB;wBAgD3D,OAAO,GAAG,iBAAiB;CA6BhD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/customMatchers.ts"],"sourcesContent":["import { expect } from 'vitest'\n\nfunction toBeType(received: unknown, expectedType: string) {\n const pass = typeof received === expectedType && !Number.isNaN(received)\n return pass\n ? {\n message: () => `expected ${received} not to be a ${expectedType}`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be a ${expectedType}`,\n pass: false,\n }\n}\n\nexport const matchers = {\n toBeArrayOfSize(received: unknown, expectedSize: number) {\n const pass = Array.isArray(received) && received.length === expectedSize\n return pass\n ? {\n message: () => `expected array not to have size ${expectedSize}, but received array of size ${received.length}`,\n pass: true,\n }\n : {\n message: () => Array.isArray(received)\n ? `expected array of size ${expectedSize}, but received array of size ${received.length}`\n : `expected array of size ${expectedSize}, but received a non-array`,\n pass: false,\n }\n },\n toBeArray(received: unknown) {\n const pass = Array.isArray(received)\n return pass\n ? {\n message: () => 'expected array',\n pass: true,\n }\n : {\n message: () => `expected array, but received ${typeof received}`,\n pass: false,\n }\n },\n toBeOneOf(received: unknown, expected: unknown[]) {\n const pass = expected.includes(received)\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be one of ${JSON.stringify(expected)}`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be one of ${JSON.stringify(expected)}`,\n }\n },\n toBeNegative(received: number) {\n if (typeof received !== 'number') {\n throw new TypeError(`Expected a number, but received ${typeof received}`)\n }\n\n const pass = received < 0\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be negative`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be negative`,\n }\n },\n toBePositive(received: number) {\n if (typeof received !== 'number') {\n throw new TypeError(`Expected a number, but received ${typeof received}`)\n }\n\n const pass = received > 0\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be positive`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be positive`,\n }\n },\n toBeNumber: (received: unknown) => toBeType(received, 'number'),\n toBeFunction: (received: unknown) => toBeType(received, 'function'),\n toBeString: (received: unknown) => toBeType(received, 'string'),\n toBeObject(received: unknown) {\n const pass = typeof received === 'object' && !Array.isArray(received) && received !== null\n return pass\n ? {\n message: () => `expected ${received} to be object`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be an object but was ${Array.isArray(received) ? 'array' : typeof received}`,\n pass: false,\n }\n },\n toBeInteger(received: number) {\n if (typeof received !== 'number') {\n throw new TypeError(`Expected a number, but received ${typeof received}`)\n }\n\n const pass = Number.isInteger(received)\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be an integer`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be an integer`,\n }\n },\n toBeFalse(received: unknown) {\n const pass = received === false\n return pass\n ? {\n message: () => `expected ${received} to be false`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be false but was not false`,\n pass: false,\n }\n },\n toBeTrue(received: unknown) {\n const pass = received === true\n return pass\n ? {\n message: () => `expected ${received} to be true`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be true but was not true`,\n pass: false,\n }\n },\n toIncludeAllMembers(received: unknown[], expected: unknown[]) {\n if (!Array.isArray(received) || !Array.isArray(expected)) {\n return {\n pass: false,\n message: () => 'Expected both received and expected values to be arrays.',\n }\n }\n\n const missingMembers = expected.filter(item => !received.includes(item))\n\n return missingMembers.length === 0\n ? {\n pass: true,\n message: () =>\n `Expected array not to include all members of ${JSON.stringify(expected)}, but it does.`,\n }\n : {\n pass: false,\n message: () =>\n `Expected array to include all members of ${JSON.stringify(expected)}. Missing members: ${JSON.stringify(\n missingMembers,\n )}.`,\n }\n },\n toContainAllKeys(received: object, expectedKeys: string[]) {\n if (typeof received !== 'object' || received === null) {\n return {\n pass: false,\n message: () => `Expected ${JSON.stringify(received)} to be an object.`,\n }\n }\n\n if (!Array.isArray(expectedKeys)) {\n return {\n pass: false,\n message: () => `Expected keys to be an array, but received ${JSON.stringify(expectedKeys)}.`,\n }\n }\n\n const missingKeys = expectedKeys.filter(key => !(key in received))\n\n return missingKeys.length === 0\n ? {\n pass: true,\n message: () =>\n `Expected object not to contain all keys ${JSON.stringify(expectedKeys)}, but it does.`,\n }\n : {\n pass: false,\n message: () =>\n `Expected object to contain all keys ${JSON.stringify(expectedKeys)}. Missing keys: ${JSON.stringify(\n missingKeys,\n )}.`,\n }\n },\n toContainValues(received: object, expectedValues: unknown[]) {\n if (typeof received !== 'object' || received === null) {\n return {\n pass: false,\n message: () => `Expected ${JSON.stringify(received)} to be an object.`,\n }\n }\n\n if (!Array.isArray(expectedValues)) {\n return {\n pass: false,\n message: () => `Expected values to be an array, but received ${JSON.stringify(expectedValues)}.`,\n }\n }\n\n const objectValues = Object.values(received)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const deepEqual = (a: any, b: any): boolean => {\n if (a === b) return true\n if (typeof a !== typeof b) return false\n if (a && b && typeof a === 'object') {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) return false\n return aKeys.every(key => deepEqual(a[key], b[key]))\n }\n return false\n }\n\n const missingValues = expectedValues.filter(\n expectedValue => !objectValues.some(value => deepEqual(value, expectedValue)),\n )\n\n return missingValues.length === 0\n ? {\n pass: true,\n message: () =>\n `Expected object not to contain all values ${JSON.stringify(expectedValues)}, but it does.`,\n }\n : {\n pass: false,\n message: () =>\n `Expected object to contain all values ${JSON.stringify(expectedValues)}. Missing values: ${JSON.stringify(\n missingValues,\n )}.`,\n }\n },\n toBeEmpty(received: unknown) {\n let isEmpty = false\n\n if (Array.isArray(received) || typeof received === 'string') {\n isEmpty = received.length === 0\n } else if (received && typeof received === 'object') {\n isEmpty = Object.keys(received).length === 0\n } else if (received instanceof Map || received instanceof Set) {\n isEmpty = received.size === 0\n } else {\n return {\n pass: false,\n message: () =>\n `Expected value to be an empty array, string, object, Map, or Set, but received ${typeof received}.`,\n }\n }\n\n return isEmpty\n ? {\n pass: true,\n message: () =>\n 'Expected value not to be empty, but it was.',\n }\n : {\n pass: false,\n message: () =>\n 'Expected value to be empty, but it was not.',\n }\n },\n}\n\nexpect.extend(matchers)\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/customMatchers.ts"],"sourcesContent":["import { expect } from 'vitest'\n\ninterface ExpectationResult {\n actual?: unknown\n expected?: unknown\n message: () => string\n pass: boolean\n}\n\nfunction toBeType(received: unknown, expectedType: string): ExpectationResult {\n const pass = typeof received === expectedType && !Number.isNaN(received)\n return pass\n ? {\n message: () => `expected ${received} not to be a ${expectedType}`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be a ${expectedType}`,\n pass: false,\n }\n}\n\nexport const matchers = {\n toBeArrayOfSize(received: unknown, expectedSize: number): ExpectationResult {\n const pass = Array.isArray(received) && received.length === expectedSize\n return pass\n ? {\n message: () => `expected array not to have size ${expectedSize}, but received array of size ${received.length}`,\n pass: true,\n }\n : {\n message: () => Array.isArray(received)\n ? `expected array of size ${expectedSize}, but received array of size ${received.length}`\n : `expected array of size ${expectedSize}, but received a non-array`,\n pass: false,\n }\n },\n toBeArray(received: unknown): ExpectationResult {\n const pass = Array.isArray(received)\n return pass\n ? {\n message: () => 'expected array',\n pass: true,\n }\n : {\n message: () => `expected array, but received ${typeof received}`,\n pass: false,\n }\n },\n toBeOneOf(received: unknown, expected: unknown[]): ExpectationResult {\n const pass = expected.includes(received)\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be one of ${JSON.stringify(expected)}`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be one of ${JSON.stringify(expected)}`,\n }\n },\n toBeNegative(received: number): ExpectationResult {\n if (typeof received !== 'number') {\n throw new TypeError(`Expected a number, but received ${typeof received}`)\n }\n\n const pass = received < 0\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be negative`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be negative`,\n }\n },\n toBePositive(received: number): ExpectationResult {\n if (typeof received !== 'number') {\n throw new TypeError(`Expected a number, but received ${typeof received}`)\n }\n\n const pass = received > 0\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be positive`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be positive`,\n }\n },\n toBeNumber: (received: unknown) => toBeType(received, 'number'),\n toBeFunction: (received: unknown) => toBeType(received, 'function'),\n toBeString: (received: unknown) => toBeType(received, 'string'),\n toBeObject(received: unknown): ExpectationResult {\n const pass = typeof received === 'object' && !Array.isArray(received) && received !== null\n return pass\n ? {\n message: () => `expected ${received} to be object`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be an object but was ${Array.isArray(received) ? 'array' : typeof received}`,\n pass: false,\n }\n },\n toBeInteger(received: number): ExpectationResult {\n if (typeof received !== 'number') {\n throw new TypeError(`Expected a number, but received ${typeof received}`)\n }\n\n const pass = Number.isInteger(received)\n return pass\n ? {\n pass: true,\n message: () =>\n `expected ${received} not to be an integer`,\n }\n : {\n pass: false,\n message: () =>\n `expected ${received} to be an integer`,\n }\n },\n toBeFalse(received: unknown): ExpectationResult {\n const pass = received === false\n return pass\n ? {\n message: () => `expected ${received} to be false`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be false but was not false`,\n pass: false,\n }\n },\n toBeTrue(received: unknown): ExpectationResult {\n const pass = received === true\n return pass\n ? {\n message: () => `expected ${received} to be true`,\n pass: true,\n }\n : {\n message: () => `expected ${received} to be true but was not true`,\n pass: false,\n }\n },\n toIncludeAllMembers(received: unknown[], expected: unknown[]): ExpectationResult {\n if (!Array.isArray(received) || !Array.isArray(expected)) {\n return {\n pass: false,\n message: () => 'Expected both received and expected values to be arrays.',\n }\n }\n\n const missingMembers = expected.filter(item => !received.includes(item))\n\n return missingMembers.length === 0\n ? {\n pass: true,\n message: () =>\n `Expected array not to include all members of ${JSON.stringify(expected)}, but it does.`,\n }\n : {\n pass: false,\n message: () =>\n `Expected array to include all members of ${JSON.stringify(expected)}. Missing members: ${JSON.stringify(\n missingMembers,\n )}.`,\n }\n },\n toContainAllKeys(received: object, expectedKeys: string[]): ExpectationResult {\n if (typeof received !== 'object' || received === null) {\n return {\n pass: false,\n message: () => `Expected ${JSON.stringify(received)} to be an object.`,\n }\n }\n\n if (!Array.isArray(expectedKeys)) {\n return {\n pass: false,\n message: () => `Expected keys to be an array, but received ${JSON.stringify(expectedKeys)}.`,\n }\n }\n\n const missingKeys = expectedKeys.filter(key => !(key in received))\n\n return missingKeys.length === 0\n ? {\n pass: true,\n message: () =>\n `Expected object not to contain all keys ${JSON.stringify(expectedKeys)}, but it does.`,\n }\n : {\n pass: false,\n message: () =>\n `Expected object to contain all keys ${JSON.stringify(expectedKeys)}. Missing keys: ${JSON.stringify(\n missingKeys,\n )}.`,\n }\n },\n toContainValues(received: object, expectedValues: unknown[]): ExpectationResult {\n if (typeof received !== 'object' || received === null) {\n return {\n pass: false,\n message: () => `Expected ${JSON.stringify(received)} to be an object.`,\n }\n }\n\n if (!Array.isArray(expectedValues)) {\n return {\n pass: false,\n message: () => `Expected values to be an array, but received ${JSON.stringify(expectedValues)}.`,\n }\n }\n\n const objectValues = Object.values(received)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const deepEqual = (a: any, b: any): boolean => {\n if (a === b) return true\n if (typeof a !== typeof b) return false\n if (a && b && typeof a === 'object') {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) return false\n return aKeys.every(key => deepEqual(a[key], b[key]))\n }\n return false\n }\n\n const missingValues = expectedValues.filter(\n expectedValue => !objectValues.some(value => deepEqual(value, expectedValue)),\n )\n\n return missingValues.length === 0\n ? {\n pass: true,\n message: () =>\n `Expected object not to contain all values ${JSON.stringify(expectedValues)}, but it does.`,\n }\n : {\n pass: false,\n message: () =>\n `Expected object to contain all values ${JSON.stringify(expectedValues)}. Missing values: ${JSON.stringify(\n missingValues,\n )}.`,\n }\n },\n toBeEmpty(received: unknown): ExpectationResult {\n let isEmpty = false\n\n if (Array.isArray(received) || typeof received === 'string') {\n isEmpty = received.length === 0\n } else if (received && typeof received === 'object') {\n isEmpty = Object.keys(received).length === 0\n } else if (received instanceof Map || received instanceof Set) {\n isEmpty = received.size === 0\n } else {\n return {\n pass: false,\n message: () =>\n `Expected value to be an empty array, string, object, Map, or Set, but received ${typeof received}.`,\n }\n }\n\n return isEmpty\n ? {\n pass: true,\n message: () =>\n 'Expected value not to be empty, but it was.',\n }\n : {\n pass: false,\n message: () =>\n 'Expected value to be empty, but it was not.',\n }\n },\n}\n\nexpect.extend(matchers)\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
package/src/customMatchers.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { expect } from 'vitest'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
interface ExpectationResult {
|
|
4
|
+
actual?: unknown
|
|
5
|
+
expected?: unknown
|
|
6
|
+
message: () => string
|
|
7
|
+
pass: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function toBeType(received: unknown, expectedType: string): ExpectationResult {
|
|
4
11
|
const pass = typeof received === expectedType && !Number.isNaN(received)
|
|
5
12
|
return pass
|
|
6
13
|
? {
|
|
@@ -14,7 +21,7 @@ function toBeType(received: unknown, expectedType: string) {
|
|
|
14
21
|
}
|
|
15
22
|
|
|
16
23
|
export const matchers = {
|
|
17
|
-
toBeArrayOfSize(received: unknown, expectedSize: number) {
|
|
24
|
+
toBeArrayOfSize(received: unknown, expectedSize: number): ExpectationResult {
|
|
18
25
|
const pass = Array.isArray(received) && received.length === expectedSize
|
|
19
26
|
return pass
|
|
20
27
|
? {
|
|
@@ -28,7 +35,7 @@ export const matchers = {
|
|
|
28
35
|
pass: false,
|
|
29
36
|
}
|
|
30
37
|
},
|
|
31
|
-
toBeArray(received: unknown) {
|
|
38
|
+
toBeArray(received: unknown): ExpectationResult {
|
|
32
39
|
const pass = Array.isArray(received)
|
|
33
40
|
return pass
|
|
34
41
|
? {
|
|
@@ -40,7 +47,7 @@ export const matchers = {
|
|
|
40
47
|
pass: false,
|
|
41
48
|
}
|
|
42
49
|
},
|
|
43
|
-
toBeOneOf(received: unknown, expected: unknown[]) {
|
|
50
|
+
toBeOneOf(received: unknown, expected: unknown[]): ExpectationResult {
|
|
44
51
|
const pass = expected.includes(received)
|
|
45
52
|
return pass
|
|
46
53
|
? {
|
|
@@ -54,7 +61,7 @@ export const matchers = {
|
|
|
54
61
|
`expected ${received} to be one of ${JSON.stringify(expected)}`,
|
|
55
62
|
}
|
|
56
63
|
},
|
|
57
|
-
toBeNegative(received: number) {
|
|
64
|
+
toBeNegative(received: number): ExpectationResult {
|
|
58
65
|
if (typeof received !== 'number') {
|
|
59
66
|
throw new TypeError(`Expected a number, but received ${typeof received}`)
|
|
60
67
|
}
|
|
@@ -72,7 +79,7 @@ export const matchers = {
|
|
|
72
79
|
`expected ${received} to be negative`,
|
|
73
80
|
}
|
|
74
81
|
},
|
|
75
|
-
toBePositive(received: number) {
|
|
82
|
+
toBePositive(received: number): ExpectationResult {
|
|
76
83
|
if (typeof received !== 'number') {
|
|
77
84
|
throw new TypeError(`Expected a number, but received ${typeof received}`)
|
|
78
85
|
}
|
|
@@ -93,7 +100,7 @@ export const matchers = {
|
|
|
93
100
|
toBeNumber: (received: unknown) => toBeType(received, 'number'),
|
|
94
101
|
toBeFunction: (received: unknown) => toBeType(received, 'function'),
|
|
95
102
|
toBeString: (received: unknown) => toBeType(received, 'string'),
|
|
96
|
-
toBeObject(received: unknown) {
|
|
103
|
+
toBeObject(received: unknown): ExpectationResult {
|
|
97
104
|
const pass = typeof received === 'object' && !Array.isArray(received) && received !== null
|
|
98
105
|
return pass
|
|
99
106
|
? {
|
|
@@ -105,7 +112,7 @@ export const matchers = {
|
|
|
105
112
|
pass: false,
|
|
106
113
|
}
|
|
107
114
|
},
|
|
108
|
-
toBeInteger(received: number) {
|
|
115
|
+
toBeInteger(received: number): ExpectationResult {
|
|
109
116
|
if (typeof received !== 'number') {
|
|
110
117
|
throw new TypeError(`Expected a number, but received ${typeof received}`)
|
|
111
118
|
}
|
|
@@ -123,7 +130,7 @@ export const matchers = {
|
|
|
123
130
|
`expected ${received} to be an integer`,
|
|
124
131
|
}
|
|
125
132
|
},
|
|
126
|
-
toBeFalse(received: unknown) {
|
|
133
|
+
toBeFalse(received: unknown): ExpectationResult {
|
|
127
134
|
const pass = received === false
|
|
128
135
|
return pass
|
|
129
136
|
? {
|
|
@@ -135,7 +142,7 @@ export const matchers = {
|
|
|
135
142
|
pass: false,
|
|
136
143
|
}
|
|
137
144
|
},
|
|
138
|
-
toBeTrue(received: unknown) {
|
|
145
|
+
toBeTrue(received: unknown): ExpectationResult {
|
|
139
146
|
const pass = received === true
|
|
140
147
|
return pass
|
|
141
148
|
? {
|
|
@@ -147,7 +154,7 @@ export const matchers = {
|
|
|
147
154
|
pass: false,
|
|
148
155
|
}
|
|
149
156
|
},
|
|
150
|
-
toIncludeAllMembers(received: unknown[], expected: unknown[]) {
|
|
157
|
+
toIncludeAllMembers(received: unknown[], expected: unknown[]): ExpectationResult {
|
|
151
158
|
if (!Array.isArray(received) || !Array.isArray(expected)) {
|
|
152
159
|
return {
|
|
153
160
|
pass: false,
|
|
@@ -171,7 +178,7 @@ export const matchers = {
|
|
|
171
178
|
)}.`,
|
|
172
179
|
}
|
|
173
180
|
},
|
|
174
|
-
toContainAllKeys(received: object, expectedKeys: string[]) {
|
|
181
|
+
toContainAllKeys(received: object, expectedKeys: string[]): ExpectationResult {
|
|
175
182
|
if (typeof received !== 'object' || received === null) {
|
|
176
183
|
return {
|
|
177
184
|
pass: false,
|
|
@@ -202,7 +209,7 @@ export const matchers = {
|
|
|
202
209
|
)}.`,
|
|
203
210
|
}
|
|
204
211
|
},
|
|
205
|
-
toContainValues(received: object, expectedValues: unknown[]) {
|
|
212
|
+
toContainValues(received: object, expectedValues: unknown[]): ExpectationResult {
|
|
206
213
|
if (typeof received !== 'object' || received === null) {
|
|
207
214
|
return {
|
|
208
215
|
pass: false,
|
|
@@ -250,7 +257,7 @@ export const matchers = {
|
|
|
250
257
|
)}.`,
|
|
251
258
|
}
|
|
252
259
|
},
|
|
253
|
-
toBeEmpty(received: unknown) {
|
|
260
|
+
toBeEmpty(received: unknown): ExpectationResult {
|
|
254
261
|
let isEmpty = false
|
|
255
262
|
|
|
256
263
|
if (Array.isArray(received) || typeof received === 'string') {
|
|
@@ -1,82 +1,27 @@
|
|
|
1
1
|
// vitest.customMatchers.d.ts
|
|
2
2
|
import 'vitest'
|
|
3
3
|
|
|
4
|
+
interface CustomMatchers<T = unknown> {
|
|
5
|
+
toBeArray(): T
|
|
6
|
+
toBeArrayOfSize(size: number): T
|
|
7
|
+
toBeEmpty(): T
|
|
8
|
+
toBeFalse(): T
|
|
9
|
+
toBeFunction(): T
|
|
10
|
+
toBeInteger(): T
|
|
11
|
+
toBeNegative(): T
|
|
12
|
+
toBeNumber(): T
|
|
13
|
+
toBeObject(): T
|
|
14
|
+
toBeOneOf(expected: unknown[]): T
|
|
15
|
+
toBePositive(): T
|
|
16
|
+
toBeString(): T
|
|
17
|
+
toBeTrue(): T
|
|
18
|
+
toContainAllKeys(expectedKeys: string[]): T
|
|
19
|
+
toContainValues(expectedValues: unknown[]): T
|
|
20
|
+
toIncludeAllMembers(expected: unknown[]): T
|
|
21
|
+
}
|
|
22
|
+
|
|
4
23
|
// Extend the expect Matchers interface
|
|
5
24
|
declare module 'vitest' {
|
|
6
|
-
interface Assertion<T = unknown> {
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
interface Assertion<T = unknown> {
|
|
10
|
-
toBeFunction(): T
|
|
11
|
-
}
|
|
12
|
-
interface Assertion<T = unknown> {
|
|
13
|
-
toBeArray(): T
|
|
14
|
-
}
|
|
15
|
-
interface Assertion<T = unknown> {
|
|
16
|
-
toBeString(): T
|
|
17
|
-
}
|
|
18
|
-
interface Assertion<T = unknown> {
|
|
19
|
-
toBeFalse(): T
|
|
20
|
-
}
|
|
21
|
-
interface Assertion<T = unknown> {
|
|
22
|
-
toBeTrue(): T
|
|
23
|
-
}
|
|
24
|
-
interface Assertion<T = unknown> {
|
|
25
|
-
toBeArrayOfSize(size: number): T
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
interface Assertion<T = unknown> {
|
|
29
|
-
toBeOneOf(expected: unknown[]): T
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
interface Assertion<T = unknown> {
|
|
33
|
-
toContainAllKeys(expectedKeys: string[]): T
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
interface Assertion<T = unknown> {
|
|
37
|
-
toIncludeAllMembers(expected: unknown[]): T
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
interface Assertion<T = unknown> {
|
|
41
|
-
toContainValues(expectedValues: unknown[]): T
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
interface Assertion<T = unknown> {
|
|
45
|
-
toBeEmpty(): T
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
interface Assertion<T = unknown> {
|
|
49
|
-
toBeObject(): T
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
interface Assertion<T = unknown> {
|
|
53
|
-
toBeNegative(): T
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
interface Assertion<T = unknown> {
|
|
57
|
-
toBePositive(): T
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
interface Assertion<T = unknown> {
|
|
61
|
-
toBeInteger(): T
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
interface expect {
|
|
65
|
-
toBeArray(): T
|
|
66
|
-
toBeArrayOfSize(size: number): T
|
|
67
|
-
toBeEmpty(): T
|
|
68
|
-
toBeFalse(): T
|
|
69
|
-
toBeFunction(): T
|
|
70
|
-
toBeInteger(): T
|
|
71
|
-
toBeNegative(): T
|
|
72
|
-
toBeNumber(): T
|
|
73
|
-
toBeObject(): T
|
|
74
|
-
toBeOneOf(expected: unknown[]): T
|
|
75
|
-
toBePositive(): T
|
|
76
|
-
toBeString(): T
|
|
77
|
-
toBeTrue(): T
|
|
78
|
-
toContainAllKeys(expectedKeys: string[]): T
|
|
79
|
-
toContainValues(expectedValues: unknown[]): T
|
|
80
|
-
toIncludeAllMembers(expected: unknown[]): T
|
|
81
|
-
}
|
|
25
|
+
interface Assertion<T = unknown> extends CustomMatchers<T> {}
|
|
26
|
+
interface AsymmetricMatchersContaining extends CustomMatchers {}
|
|
82
27
|
}
|