Skip to content

fix(webdriverio): handle dynamic function payloads in mock.respond#15096

Open
mccmrunal wants to merge 1 commit intomainfrom
fix/mock-respond-dynamic-payload
Open

fix(webdriverio): handle dynamic function payloads in mock.respond#15096
mccmrunal wants to merge 1 commit intomainfrom
fix/mock-respond-dynamic-payload

Conversation

@mccmrunal
Copy link
Copy Markdown
Contributor

Proposed changes

fixes #14926
//: # (Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue.)
Fixed an issue where mock.respond() would fail when provided with a function payload because it eagerly serialized the function to undefined, creating an invalid response body.

Types of changes

  • Polish (an improvement for an existing feature)
  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update (improvements to the project's docs)
  • Specification changes (updates to WebDriver command specifications)
  • Internal updates (everything related to internal scripts, governance documentation and CI files)

Checklist

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works
  • I have added the necessary documentation (if appropriate)
  • I have added proper type definitions for new commands (if appropriate)

Backport Request

//: # (The current main branch is the development branch for WebdriverIO v9. If your change should be released to the current major version of WebdriverIO (v8), please raise another PR with the same changes against the v8 branch.)

  • This change is solely for v9 and doesn't need to be back-ported
  • Back-ported PR at #XXXXX

Further comments

The initial issue was caused by JSON.stringify returning undefined for functions. The fix ensures that the function is preserved and executed when the network event occurs, allowing dynamic modification of the response. A regression test case was added to index.test.ts to verify this behavior.
//: # (If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...)

Reviewers: @webdriverio/project-committers

@mccmrunal mccmrunal force-pushed the fix/mock-respond-dynamic-payload branch from 8c08b89 to 489e929 Compare February 13, 2026 18:11
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented Feb 13, 2026

Open in StackBlitz

create-wdio

npm i https://pkg.pr.new/webdriverio/webdriverio/create-wdio@15096

eslint-plugin-wdio

npm i https://pkg.pr.new/webdriverio/webdriverio/eslint-plugin-wdio@15096

@wdio/allure-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/allure-reporter@15096

@wdio/appium-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/appium-service@15096

@wdio/browser-runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/browser-runner@15096

@wdio/browserstack-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/browserstack-service@15096

@wdio/cli

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/cli@15096

@wdio/concise-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/concise-reporter@15096

@wdio/config

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/config@15096

@wdio/cucumber-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/cucumber-framework@15096

@wdio/dot-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/dot-reporter@15096

@wdio/firefox-profile-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/firefox-profile-service@15096

@wdio/globals

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/globals@15096

@wdio/jasmine-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/jasmine-framework@15096

@wdio/json-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/json-reporter@15096

@wdio/junit-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/junit-reporter@15096

@wdio/lighthouse-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/lighthouse-service@15096

@wdio/local-runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/local-runner@15096

@wdio/logger

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/logger@15096

@wdio/mocha-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/mocha-framework@15096

@wdio/protocols

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/protocols@15096

@wdio/repl

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/repl@15096

@wdio/reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/reporter@15096

@wdio/runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/runner@15096

@wdio/sauce-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/sauce-service@15096

@wdio/shared-store-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/shared-store-service@15096

@wdio/smoke-test-cjs-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-cjs-service@15096

@wdio/smoke-test-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-reporter@15096

@wdio/smoke-test-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-service@15096

@wdio/spec-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/spec-reporter@15096

@wdio/static-server-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/static-server-service@15096

@wdio/sumologic-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/sumologic-reporter@15096

@wdio/testingbot-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/testingbot-service@15096

@wdio/types

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/types@15096

@wdio/utils

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/utils@15096

@wdio/webdriver-mock-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/webdriver-mock-service@15096

@wdio/xvfb

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/xvfb@15096

webdriver

npm i https://pkg.pr.new/webdriverio/webdriverio/webdriver@15096

webdriverio

npm i https://pkg.pr.new/webdriverio/webdriverio@15096

commit: 489e929

return payload
}

return JSON.stringify(payload) ?? 'null'
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSON.stringify can return undefined for unsupported values (functions, symbols, undefined), so the ?? 'null' fallback silently converts those to the string "null". it could be confusing to debug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[🐛 Bug]: Mock with dynamic value for respond() is showing an "invalid input" error

2 participants