diff --git a/packages/vitest/src/index.ts b/packages/vitest/src/index.ts index fbd255606..8ade2fca6 100644 --- a/packages/vitest/src/index.ts +++ b/packages/vitest/src/index.ts @@ -56,7 +56,7 @@ declare global { interface AsymmetricMatchersContaining { stringContaining(expected: string): any objectContaining(expected: any): any - arrayContaining(expected: unknown[]): any + arrayContaining(expected: Array): any stringMatching(expected: string | RegExp): any } diff --git a/packages/vitest/src/integrations/chai/jest-asymmetric-matchers.ts b/packages/vitest/src/integrations/chai/jest-asymmetric-matchers.ts index 75119d46a..3e279fba4 100644 --- a/packages/vitest/src/integrations/chai/jest-asymmetric-matchers.ts +++ b/packages/vitest/src/integrations/chai/jest-asymmetric-matchers.ts @@ -127,12 +127,12 @@ export class ObjectContaining extends AsymmetricMatcher> } } -export class ArrayContaining extends AsymmetricMatcher> { - constructor(sample: Array, inverse = false) { +export class ArrayContaining extends AsymmetricMatcher> { + constructor(sample: Array, inverse = false) { super(sample, inverse) } - asymmetricMatch(other: Array) { + asymmetricMatch(other: Array) { if (!Array.isArray(this.sample)) { throw new TypeError( `You must provide an array to ${this.toString()}, not '${ @@ -287,7 +287,7 @@ export const JestAsymmetricMatchers: ChaiPlugin = (chai, utils) => { utils.addMethod( chai.expect, 'arrayContaining', - (expected: any) => new ArrayContaining(expected), + (expected: Array) => new ArrayContaining(expected), ) utils.addMethod( @@ -300,7 +300,7 @@ export const JestAsymmetricMatchers: ChaiPlugin = (chai, utils) => { ;(chai.expect as any).not = { stringContaining: (expected: string) => new StringContaining(expected, true), objectContaining: (expected: any) => new ObjectContaining(expected, true), - arrayContaining: (expected: unknown[]) => new ArrayContaining(expected, true), + arrayContaining: (expected: Array) => new ArrayContaining(expected, true), stringMatching: (expected: string | RegExp) => new StringMatching(expected, true), } } diff --git a/test/core/test/jest-expect.test.ts b/test/core/test/jest-expect.test.ts index a27751b54..b9c87fbf1 100644 --- a/test/core/test/jest-expect.test.ts +++ b/test/core/test/jest-expect.test.ts @@ -111,6 +111,20 @@ describe('jest-expect', () => { expect(['Bob', 'Eve']).toEqual(expect.arrayContaining(['Bob'])) expect(['Bob', 'Eve']).not.toEqual(expect.arrayContaining(['Mohammad'])) + expect([ + { name: 'Bob' }, + { name: 'Eve' }, + ]).toEqual(expect.arrayContaining<{ name: string }>([ + { name: 'Bob' }, + ])) + expect([ + { name: 'Bob' }, + { name: 'Eve' }, + ]).not.toEqual(expect.arrayContaining<{ name: string }>([ + { name: 'Mohammad' }, + ])) + + expect('Mohammad').toEqual(expect.stringMatching(/Moh/)) expect('Mohammad').not.toEqual(expect.stringMatching(/jack/))