Skip to content

Commit 43392bd

Browse files
committed
Code review
1 parent 06d8a38 commit 43392bd

File tree

2 files changed

+54
-49
lines changed

2 files changed

+54
-49
lines changed

src/softExpect.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ const createSoftExpect = <T = unknown>(actual: T): ExpectWebdriverIO.Matchers<Pr
3030
// Support basic & wdio (and more) matchers that start with "to"
3131
return createSoftMatcher(actual, propName, softService)
3232
}
33+
34+
// For any other properties, return undefined
3335
return undefined
3436
}
3537
})
@@ -68,7 +70,7 @@ const createSoftMatcher = <T>(
6870
softService: SoftAssertService,
6971
prefix?: string
7072
) => {
71-
return (...args: unknown[]) => {
73+
return (...args: unknown[]): ExpectWebdriverIO.AsyncAssertionResult | SyncExpectationResult => {
7274
try {
7375
// Build the expectation chain
7476
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -106,7 +108,7 @@ function handlingMatcherFailure(prefix: string | undefined, matcherName: string,
106108
return {
107109
pass: true,
108110
message: () => `Soft assertion failed: ${fullMatcherName}`
109-
}
111+
} satisfies SyncExpectationResult
110112
}
111113

112114
export default createSoftExpect

test/types.test-d.ts

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -6,54 +6,57 @@ import { expect as expectWdio } from '../src/index.js'
66

77
describe('Type test', () => {
88

9-
test('Jest "expect" lib type tests as baseline', () => {
9+
describe('Expects + Promise matchers & basic matchers', () => {
10+
11+
test('Jest "expect" lib type tests as baseline', () => {
12+
// Basic matchers
13+
expectTypeOf(expectLib(true)).toExtend<Matchers<void, boolean> & Inverse<Matchers<void, boolean>>>()
14+
expectTypeOf(expectLib(true).toBe(true)).toBeVoid()
15+
expectTypeOf(expectLib(true).toBe(true)).not.toExtend<Promise<void>>()
16+
expectTypeOf(expectLib(Promise.resolve(true)).toBe(expect.any)).toBeVoid()
17+
expectTypeOf(expectLib(Promise.resolve(true)).resolves.toBe(expect.any)).resolves.toBeVoid()
18+
19+
// element matchers are not available in 'expect' lib
20+
expectTypeOf(expectLib($('element')).toBe(expect.any)).toBeVoid()
21+
expectTypeOf(expectLib($('element'))).not.toHaveProperty('toHaveText')
22+
expectTypeOf(expectLib($$('elements')).toBe(expect.any)).toBeVoid()
23+
expectTypeOf(expectLib($$('elements'))).not.toHaveProperty('toHaveText')
24+
})
25+
26+
test('Wdio expect & matchers type tests', () => {
1027
// Basic matchers
11-
expectTypeOf(expectLib(true)).toExtend<Matchers<void, boolean> & Inverse<Matchers<void, boolean>>>()
12-
expectTypeOf(expectLib(true).toBe(true)).toBeVoid()
13-
expectTypeOf(expectLib(true).toBe(true)).not.toExtend<Promise<void>>()
14-
expectTypeOf(expectLib(Promise.resolve(true)).toBe(expect.any)).toBeVoid()
15-
expectTypeOf(expectLib(Promise.resolve(true)).resolves.toBe(expect.any)).resolves.toBeVoid()
16-
17-
// element matchers are not available in 'expect' lib
18-
expectTypeOf(expectLib($('element')).toBe(expect.any)).toBeVoid()
19-
expectTypeOf(expectLib($('element'))).not.toHaveProperty('toHaveText')
20-
expectTypeOf(expectLib($$('elements')).toBe(expect.any)).toBeVoid()
21-
expectTypeOf(expectLib($$('elements'))).not.toHaveProperty('toHaveText')
22-
})
23-
24-
test('Wdio expect & matchers type tests', () => {
25-
// Basic matchers
26-
expectTypeOf(expectWdio(true)).toExtend<Matchers<void, boolean> & Inverse<Matchers<void, boolean>>>()
27-
expectTypeOf(expectWdio(true).toBe(true)).toBeVoid()
28-
expectTypeOf(expectWdio(true).toBe(true)).not.toExtend<Promise<void>>()
29-
expectTypeOf(expectWdio(Promise.resolve(true)).toBe(true))
30-
expectTypeOf(expectWdio(Promise.resolve(true)).resolves.toBe(true)).resolves.toBeVoid()
31-
32-
// element matchers
33-
expectTypeOf(expectWdio($('element')).toBe(expect.any)).toBeVoid()
34-
expectTypeOf(expectWdio($('element')).toHaveText('test')).not.toBeVoid()
35-
expectTypeOf(expectWdio($('element')).toHaveText('test')).toExtend<Promise<void>>()
36-
expectTypeOf(expectWdio($$('elements')).toBe(expect.any)).toBeVoid()
37-
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).toExtend<Promise<void>>()
38-
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).not.toBeVoid()
39-
40-
})
41-
42-
test('Wdio soft expect & matchers type tests', () => {
28+
expectTypeOf(expectWdio(true)).toExtend<Matchers<void, boolean> & Inverse<Matchers<void, boolean>>>()
29+
expectTypeOf(expectWdio(true).toBe(true)).toBeVoid()
30+
expectTypeOf(expectWdio(true).toBe(true)).not.toExtend<Promise<void>>()
31+
expectTypeOf(expectWdio(Promise.resolve(true)).toBe(true))
32+
expectTypeOf(expectWdio(Promise.resolve(true)).resolves.toBe(true)).resolves.toBeVoid()
33+
34+
// element matchers
35+
expectTypeOf(expectWdio($('element')).toBe(expect.any)).toBeVoid()
36+
expectTypeOf(expectWdio($('element')).toHaveText('test')).not.toBeVoid()
37+
expectTypeOf(expectWdio($('element')).toHaveText('test')).toExtend<Promise<void>>()
38+
expectTypeOf(expectWdio($$('elements')).toBe(expect.any)).toBeVoid()
39+
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).toExtend<Promise<void>>()
40+
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).not.toBeVoid()
41+
42+
})
43+
44+
test('Wdio soft expect & matchers type tests', () => {
4345
// Basic matchers
44-
expectTypeOf(expectWdio.soft(true)).toExtend<Matchers<void, boolean> & Inverse<Matchers<void, boolean>>>()
45-
expectTypeOf(expectWdio.soft(true).toBe(true)).toExtend<void>()
46-
expectTypeOf(expectWdio.soft(true).toBe(true)).not.toExtend<Promise<void>>()
47-
// to fix?
48-
//expectTypeOf(expectWdio.soft(Promise.resolve(true)).toBe(expect.any)).toBeVoid()
49-
expectTypeOf(expectWdio.soft(Promise.resolve(true)).resolves.toBe(expect.any)).toExtend<Promise<void>>()
50-
51-
// element matchers
52-
expectTypeOf(expectWdio($('element')).toBe(expect.any)).toBeVoid()
53-
expectTypeOf(expectWdio($('element')).toHaveText('test')).not.toBeVoid()
54-
expectTypeOf(expectWdio($('element')).toHaveText('test')).toExtend<Promise<void>>()
55-
expectTypeOf(expectWdio($$('elements')).toBe(expect.any)).toBeVoid()
56-
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).toExtend<Promise<void>>()
57-
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).not.toBeVoid()
46+
expectTypeOf(expectWdio.soft(true)).toExtend<Matchers<void, boolean> & Inverse<Matchers<void, boolean>>>()
47+
expectTypeOf(expectWdio.soft(true).toBe(true)).toExtend<void>()
48+
expectTypeOf(expectWdio.soft(true).toBe(true)).not.toExtend<Promise<void>>()
49+
// TODO to fix one day? When non elements matchers + promise, we should stick to void and not have Promise<void>
50+
//expectTypeOf(expectWdio.soft(Promise.resolve(true)).toBe(expect.any)).toBeVoid()
51+
expectTypeOf(expectWdio.soft(Promise.resolve(true)).resolves.toBe(expect.any)).toExtend<Promise<void>>()
52+
53+
// element matchers
54+
expectTypeOf(expectWdio($('element')).toBe(expect.any)).toBeVoid()
55+
expectTypeOf(expectWdio($('element')).toHaveText('test')).not.toBeVoid()
56+
expectTypeOf(expectWdio($('element')).toHaveText('test')).toExtend<Promise<void>>()
57+
expectTypeOf(expectWdio($$('elements')).toBe(expect.any)).toBeVoid()
58+
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).toExtend<Promise<void>>()
59+
expectTypeOf(expectWdio($$('elements')).toHaveText('test')).not.toBeVoid()
60+
})
5861
})
5962
})

0 commit comments

Comments
 (0)