@@ -126,7 +126,7 @@ function createMock<TArgs extends unknown[] = unknown[], TResult = unknown>(
126126 return mockFn ;
127127}
128128
129- function createExpect ( actual : unknown ) {
129+ function createMatchers ( actual : unknown ) {
130130 return {
131131 toBe ( expected : unknown ) {
132132 if ( ! Object . is ( actual , expected ) ) {
@@ -156,6 +156,23 @@ function createExpect(actual: unknown) {
156156 throw createAssertionError ( `Expected value to contain ${ String ( expected ) } ` ) ;
157157 }
158158 } ,
159+ toMatch ( expected : RegExp | string ) {
160+ if ( typeof actual !== "string" ) {
161+ throw createAssertionError ( "Expected value to be a string" ) ;
162+ }
163+
164+ if ( expected instanceof RegExp ) {
165+ if ( ! expected . test ( actual ) ) {
166+ throw createAssertionError ( `Expected ${ actual } to match ${ String ( expected ) } ` ) ;
167+ }
168+
169+ return ;
170+ }
171+
172+ if ( ! actual . includes ( expected ) ) {
173+ throw createAssertionError ( `Expected ${ actual } to contain ${ expected } ` ) ;
174+ }
175+ } ,
159176 toContainEqual ( expected : unknown ) {
160177 if ( ! Array . isArray ( actual ) ) {
161178 throw createAssertionError ( "Expected value to be an array" ) ;
@@ -225,6 +242,32 @@ function createExpect(actual: unknown) {
225242 throw createAssertionError ( "Expected object to match" ) ;
226243 }
227244 } ,
245+ } ;
246+ }
247+
248+ function createExpect ( actual : unknown ) {
249+ const matchers = createMatchers ( actual ) ;
250+
251+ return {
252+ ...matchers ,
253+ get resolves ( ) {
254+ const promise = Promise . resolve ( actual ) ;
255+
256+ return Object . fromEntries (
257+ Object . entries ( createMatchers ( undefined ) ) . map ( ( [ name ] ) => [
258+ name ,
259+ async ( ...args : unknown [ ] ) => {
260+ const resolved = await promise ;
261+ const resolvedMatchers = createMatchers ( resolved ) as Record <
262+ string ,
263+ ( ...args : unknown [ ] ) => unknown
264+ > ;
265+
266+ return resolvedMatchers [ name ] ( ...args ) ;
267+ } ,
268+ ] ) ,
269+ ) ;
270+ } ,
228271 get rejects ( ) {
229272 return {
230273 async toThrow ( expected ?: new ( ...args : any [ ] ) => unknown ) {
0 commit comments