Skip to content

Commit 3c3cb10

Browse files
committed
Have multi-remote values in error message for toHaveText
1 parent 3385276 commit 3c3cb10

2 files changed

Lines changed: 13 additions & 8 deletions

File tree

src/matchers/element/toHaveText.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export async function toHaveText(
3333
expectedValue = buildWdioAsymmetricMatchersWithOptions(expectedValue, options)
3434

3535
const isNewStrictCompare = getFeatureFlagValue(options, 'useToHaveTextStrictMultiElementsCompareStrategy')
36-
const { success: pass, actual: actualText, subject: subject, context: { isSome } = {} } = await waitUntil(
36+
const { success: pass, actual: actualText, subject: subject, context: { isSome } = {}, expected } = await waitUntil(
3737
async (iteration) => {
3838
return await executeCommandWithStrategy( {
3939
unresolvedElements: received,
@@ -50,8 +50,8 @@ export async function toHaveText(
5050
{ wait: options.wait, interval: options.interval }
5151
)
5252

53-
const expected = fillSingleExpectedForElementArray(subject, expectedValue)
54-
const message = enhanceError(subject, expected, actualText, { isNot, isSome }, verb, expectation, '', options)
53+
const finalExpected =expected ?? fillSingleExpectedForElementArray(subject, expectedValue)
54+
const message = enhanceError(subject, finalExpected, actualText, { isNot, isSome }, verb, expectation, '', options)
5555
const result: ExpectWebdriverIO.AssertionResult = {
5656
pass,
5757
message: (): string => message

src/util/executeCommand.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,20 +175,25 @@ export const multipleElementResultsStrategy = async <Actual, Expected>(
175175
let results: CompareResult<Actual>[] = []
176176

177177
let multiRemoteActual: MultiRemoteValuesWithArray<Actual> | undefined
178+
let multiRemoteExpected: MultiRemoteValues<Expected> | undefined
178179
// --- Multi-remote $() single element case ---
179180
if (multiRemoteSelector && !Array.isArray(expectedValues)) {
180-
let multiRemoteExpected = expectedValues
181-
if (!isMultiRemoteValues(expectedValues, multiRemoteSelector.instances)) {
181+
multiRemoteActual = {}
182+
183+
// eslint-disable-next-line unicorn/prefer-ternary
184+
if (isMultiRemoteValues(expectedValues, multiRemoteSelector.instances)) {
185+
multiRemoteExpected = expectedValues
186+
} else {
182187
multiRemoteExpected = multiRemoteSelector.instances.reduce((acc, instance) => {
183188
acc[instance] = expectedValues as Expected
184189
return acc
185190
}, {} as MultiRemoteValues<Expected>)
186191
}
187192

188-
if (!isMultiRemoteValues(multiRemoteExpected, multiRemoteSelector.instances)) { throw new Error('multiRemoteExpected is not a MultiRemoteValues') }
189-
190193
results = await Promise.all(
191194
Object.keys(multiRemoteExpected).map(async (instance) => {
195+
if (!multiRemoteExpected) {throw new Error('multiRemoteExpected is undefined')}
196+
192197
const expectValue = multiRemoteExpected[instance]
193198

194199
// TODO: non-existing multi-remote element should probably be a element with error and not to throw??
@@ -289,7 +294,7 @@ export const multipleElementResultsStrategy = async <Actual, Expected>(
289294
? !(isNotEmpty && checkNotFn(results))
290295
: isNotEmpty && checkFn(results)
291296

292-
return { subject, success, actual: multiRemoteActual ?? results.map(({ actual }) => actual), context: { isSome } }
297+
return { subject, success, actual: multiRemoteActual ?? results.map(({ actual }) => actual), context: { isSome }, expected: multiRemoteExpected }
293298
}
294299

295300
const isAllTrue = (results: CompareResult<unknown>[]): boolean => results.every((res) => res.success === true)

0 commit comments

Comments
 (0)