Skip to content

fix(expect): soft assertions continue after .resolves/.rejects promise errors#9843

Merged
hi-ogawa merged 3 commits intovitest-dev:mainfrom
mixelburg:fix/soft-expect-resolves-rejects
Mar 16, 2026
Merged

fix(expect): soft assertions continue after .resolves/.rejects promise errors#9843
hi-ogawa merged 3 commits intovitest-dev:mainfrom
mixelburg:fix/soft-expect-resolves-rejects

Conversation

@mixelburg
Copy link
Copy Markdown
Contributor

Bug

When expect.soft() is combined with .resolves and the awaited promise rejects, the test aborts instead of recording the failure and continuing (which is what expect.soft is designed to do).

The symmetric case also fails: expect.soft(resolvedPromise).rejects aborts when the promise resolves.

Fixes #9838

Root cause

Inside both the .resolves and .rejects proxy accessors, the method interceptor creates a new promise (the Promise.resolve(obj).then(...).catch(...) chain), then hands it to recordAsyncExpect:

return recordAsyncExpect(
  test,
  promise,
  createAssertionMessage(utils, this, !!args.length),
  error,
  // <-- isSoft was never passed!
)

recordAsyncExpect has a special isSoft branch:

if (isSoft) {
  promise = promise.then(noop, (err) => {
    handleTestError(test, err)  // record without throwing
  })
}

Without isSoft, the rejection propagates through the returned promise wrapper; when the caller awaits it, the test runner sees an unhandled rejection and aborts the test.

Fix

Pass utils.flag(this, 'soft') (which is already set by expect.soft()) as the fifth argument in both recordAsyncExpect calls.

Tests added

Added two new fixture test cases to test/cli/fixtures/expect-soft/expects/soft.test.ts:

  • promise rejection — two consecutive expect.soft(rejectedPromise).resolves.toBe(...) assertions; both should execute and both failures should be reported (regression for issue)
  • promise resolved instead of rejecting — two consecutive expect.soft(resolvedPromise).rejects.toBe(...) assertions; same expectation for symmetric case

And corresponding expectations in test/cli/test/expect-soft.test.ts that verify both failure messages appear in stderr.

…s proxies

When expect.soft() is used with .resolves, a rejection in the awaited
promise was not handled softly. Instead of recording the failure and
continuing (as expect.soft() should), the rejection propagated to the
test, aborting execution of subsequent assertions.

Root cause: the .resolves and .rejects proxy callbacks call
recordAsyncExpect() without passing the isSoft flag. When isSoft is
false/undefined, recordAsyncExpect does not attach a rejection handler
to swallow the error and record it in test.result.errors; the returned
promise still rejects, so awaiting it terminates the test.

Fix: pass utils.flag(this, 'soft') as the isSoft argument to both
recordAsyncExpect calls (in the resolves proxy and in the rejects
proxy).

The same fix also corrects the symmetric case for .rejects: if
expect.soft(resolvedPromise).rejects is used, the 'resolved instead of
rejecting' error is now recorded softly and execution continues.

Fixes vitest-dev#9838
@hi-ogawa
Copy link
Copy Markdown
Collaborator

CI failing. fix please.

@netlify
Copy link
Copy Markdown

netlify bot commented Mar 12, 2026

Deploy Preview for vitest-dev ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit cd2692f
🔍 Latest deploy log https://app.netlify.com/projects/vitest-dev/deploys/69b777061f32c50008d16c62
😎 Deploy Preview https://deploy-preview-9843--vitest-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@hi-ogawa
Copy link
Copy Markdown
Collaborator

Looks good. Can you also add another already working case as test cases? #9838

@hi-ogawa hi-ogawa assigned hi-ogawa and unassigned hi-ogawa Mar 13, 2026
Copy link
Copy Markdown
Collaborator

@hi-ogawa hi-ogawa left a comment

Choose a reason for hiding this comment

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

It turned out what I requested is already covered in

test('promise', async () => {
await expect.soft(
new Promise((resolve) => {
setTimeout(() => {
resolve(1)
})
}),
).resolves.toBe(2)
await expect.soft(
new Promise((resolve) => {
setTimeout(() => {
resolve(2)
})
}),
).resolves.toBe(3)
})

@hi-ogawa hi-ogawa merged commit 6d74b49 into vitest-dev:main Mar 16, 2026
15 of 16 checks passed
736-c41-2c1-e464fc974 pushed a commit to Swiss-Armed-Forces/Loom that referenced this pull request Mar 30, 2026
This MR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | patch | [`8.57.0` → `8.57.2`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.57.0/8.57.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | patch | [`8.57.0` → `8.57.2`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.57.0/8.57.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [i18next](https://www.i18next.com) ([source](https://github.com/i18next/i18next)) | dependencies | patch | [`25.10.9` → `25.10.10`](https://renovatebot.com/diffs/npm/i18next/25.10.9/25.10.10) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/i18next/i18next/badge)](https://securityscorecards.dev/viewer/?uri=github.com/i18next/i18next) |
| [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | dependencies | patch | [`7.13.1` → `7.13.2`](https://renovatebot.com/diffs/npm/react-router-dom/7.13.1/7.13.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/remix-run/react-router/badge)](https://securityscorecards.dev/viewer/?uri=github.com/remix-run/react-router) |
| [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | devDependencies | patch | [`8.57.0` → `8.57.2`](https://renovatebot.com/diffs/npm/typescript-eslint/8.57.0/8.57.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [vitest](https://vitest.dev) ([source](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | devDependencies | patch | [`4.1.0` → `4.1.2`](https://renovatebot.com/diffs/npm/vitest/4.1.0/4.1.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/vitest-dev/vitest/badge)](https://securityscorecards.dev/viewer/?uri=github.com/vitest-dev/vitest) |

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/eslint-plugin)</summary>

### [`v8.57.2`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8572-2026-03-23)

[Compare Source](typescript-eslint/typescript-eslint@v8.57.1...v8.57.2)

##### 🩹 Fixes

- **eslint-plugin:** \[prefer-readonly-parameter-types] preserve type alias infomation ([#&#8203;11954](typescript-eslint/typescript-eslint#11954))
- **eslint-plugin:** \[no-useless-default-assignment] skip reporting false positives for unresolved type parameters ([#&#8203;12127](typescript-eslint/typescript-eslint#12127))
- **eslint-plugin:** \[no-unsafe-return] false positive on unwrapping generic ([#&#8203;12125](typescript-eslint/typescript-eslint#12125))
- **eslint-plugin:** \[no-restricted-types] flag banned generics in extends or implements ([#&#8203;12120](typescript-eslint/typescript-eslint#12120))
- **eslint-plugin:** \[array-type] ignore Array and ReadonlyArray without type arguments ([#&#8203;11971](typescript-eslint/typescript-eslint#11971))
- **eslint-plugin:** \[prefer-optional-chain] remove dangling closing parenthesis ([#&#8203;11865](typescript-eslint/typescript-eslint#11865))

##### ❤️ Thank You

- Kirk Waiblinger [@&#8203;kirkwaiblinger](https://github.com/kirkwaiblinger)
- Konv Suu
- mdm317
- Newton Yuan [@&#8203;NewtonYuan](https://github.com/NewtonYuan)
- SungHyun627 [@&#8203;SungHyun627](https://github.com/SungHyun627)
- Tamashoo [@&#8203;Tamashoo](https://github.com/Tamashoo)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.2) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

### [`v8.57.1`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8571-2026-03-16)

[Compare Source](typescript-eslint/typescript-eslint@v8.57.0...v8.57.1)

##### 🩹 Fixes

- **eslint-plugin:** \[prefer-optional-chain] no report for property on intersection type ([#&#8203;12126](typescript-eslint/typescript-eslint#12126))

##### ❤️ Thank You

- Newton Yuan [@&#8203;NewtonYuan](https://github.com/NewtonYuan)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v8.57.2`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8572-2026-03-23)

[Compare Source](typescript-eslint/typescript-eslint@v8.57.1...v8.57.2)

This was a version bump only for parser to align it with other projects, there were no code changes.

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.2) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

### [`v8.57.1`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8571-2026-03-16)

[Compare Source](typescript-eslint/typescript-eslint@v8.57.0...v8.57.1)

This was a version bump only for parser to align it with other projects, there were no code changes.

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>i18next/i18next (i18next)</summary>

### [`v25.10.10`](https://github.com/i18next/i18next/blob/HEAD/CHANGELOG.md#251010)

[Compare Source](i18next/i18next@v25.10.9...v25.10.10)

- feat: suppress support notice automatically in production environments (`NODE_ENV=production`)

</details>

<details>
<summary>remix-run/react-router (react-router-dom)</summary>

### [`v7.13.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#7132)

[Compare Source](https://github.com/remix-run/react-router/compare/[email protected]@7.13.2)

##### Patch Changes

- Updated dependencies:
  - `[email protected]`

</details>

<details>
<summary>typescript-eslint/typescript-eslint (typescript-eslint)</summary>

### [`v8.57.2`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8572-2026-03-23)

[Compare Source](typescript-eslint/typescript-eslint@v8.57.1...v8.57.2)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.2) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

### [`v8.57.1`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8571-2026-03-16)

[Compare Source](typescript-eslint/typescript-eslint@v8.57.0...v8.57.1)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (vitest)</summary>

### [`v4.1.2`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.2)

[Compare Source](vitest-dev/vitest@v4.1.1...v4.1.2)

This release bumps Vitest's `flatted` version and removes version pinning to resolve `flatted`'s CVE related issues ([#&#8203;9975](vitest-dev/vitest#9975)).

#####    🐞 Bug Fixes

- Don't resolve `setupFiles` from parent directory  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9960](vitest-dev/vitest#9960) [<samp>(7aa93)</samp>](vitest-dev/vitest@7aa937776)
- Ensure sequential mock/unmock resolution  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9830](vitest-dev/vitest#9830) [<samp>(7c065)</samp>](vitest-dev/vitest@7c06598db)
- **browser**: Take failure screenshot if `toMatchScreenshot` can't capture a stable screenshot  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9847](vitest-dev/vitest#9847) [<samp>(faace)</samp>](vitest-dev/vitest@faace1fbe)
- **coverage**: Correct `coverageConfigDefaults` values and types  -  by [@&#8203;Arthie](https://github.com/Arthie) in [#&#8203;9940](vitest-dev/vitest#9940) [<samp>(b3c99)</samp>](vitest-dev/vitest@b3c992cb2)
- **pretty-format**: Fix output limit over counting  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9965](vitest-dev/vitest#9965) [<samp>(d3b7a)</samp>](vitest-dev/vitest@d3b7a40fa)
- Disable colors if agent is detected  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) and [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9851](vitest-dev/vitest#9851) [<samp>(6f97b)</samp>](vitest-dev/vitest@6f97b55dd)

#####     [View changes on GitHub](vitest-dev/vitest@v4.1.1...v4.1.2)

### [`v4.1.1`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.1)

[Compare Source](vitest-dev/vitest@v4.1.0...v4.1.1)

#####    🚀 Features

- **experimental**:
  - Expose `matchesTags` to test if the current filter matches tags  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9913](vitest-dev/vitest#9913) [<samp>(eec53)</samp>](vitest-dev/vitest@eec53d9f5)
  - Introduce `experimental.vcsProvider`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9928](vitest-dev/vitest#9928) [<samp>(56115)</samp>](vitest-dev/vitest@561150036)

#####    🐞 Bug Fixes

- Mark `TestProject.testFilesList` internal properly  -  by [@&#8203;sapphi-red](https://github.com/sapphi-red) in [#&#8203;9867](vitest-dev/vitest#9867) [<samp>(54f26)</samp>](vitest-dev/vitest@54f2660f5)
- Detect fixture that returns without calling `use`  -  by [@&#8203;oilater](https://github.com/oilater) in [#&#8203;9831](vitest-dev/vitest#9831) and [#&#8203;9861](vitest-dev/vitest#9861) [<samp>(633ae)</samp>](vitest-dev/vitest@633ae2303)
- Drop vite 8.beta support  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9862](vitest-dev/vitest#9862) [<samp>(b78f5)</samp>](vitest-dev/vitest@b78f5389d)
- Type regression in vi.mocked() static class methods  -  by [@&#8203;purepear](https://github.com/purepear) and [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9857](vitest-dev/vitest#9857) [<samp>(90926)</samp>](vitest-dev/vitest@90926641b)
- Properly re-evaluate actual modules of mocked external  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9898](vitest-dev/vitest#9898) [<samp>(ae5ec)</samp>](vitest-dev/vitest@ae5ec03ef)
- Preserve coverage report when html reporter overlaps  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9889](vitest-dev/vitest#9889) [<samp>(2d81a)</samp>](vitest-dev/vitest@2d81ad897)
- Provide `vi.advanceTimers` to the preview provider  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9891](vitest-dev/vitest#9891) [<samp>(1bc3e)</samp>](vitest-dev/vitest@1bc3e63be)
- Don't leak event listener in playwright provider  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9910](vitest-dev/vitest#9910) [<samp>(d9355)</samp>](vitest-dev/vitest@d93550ff7)
- Open browser in `--standalone` mode without running tests  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9911](vitest-dev/vitest#9911) [<samp>(e78ad)</samp>](vitest-dev/vitest@e78adcf97)
- Guard disposable and optional `body`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9912](vitest-dev/vitest#9912) [<samp>(6fdb2)</samp>](vitest-dev/vitest@6fdb2ba61)
- Resolve `retry.condition` RegExp serialization issue  -  by [@&#8203;nstepien](https://github.com/nstepien) and [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9942](vitest-dev/vitest#9942) [<samp>(7b605)</samp>](vitest-dev/vitest@7b6054328)
- **collect**:
  - Don't treat extra props on `test` return as tests  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9871](vitest-dev/vitest#9871) [<samp>(141e7)</samp>](vitest-dev/vitest@141e72aa1)
- **coverage**:
  - Simplify provider types  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9931](vitest-dev/vitest#9931) [<samp>(aaf9f)</samp>](vitest-dev/vitest@aaf9f18ae)
  - Load built-in provider without module runner  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9939](vitest-dev/vitest#9939) [<samp>(bf892)</samp>](vitest-dev/vitest@bf8920817)
- **expect**:
  - Soft assertions continue after .resolves/.rejects promise errors  -  by [@&#8203;mixelburg](https://github.com/mixelburg), **Maks Pikov**, **Claude Opus 4.6 (1M context)** and [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9843](vitest-dev/vitest#9843) [<samp>(6d74b)</samp>](vitest-dev/vitest@6d74b4948)
  - Fix sinon-chai style API  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9943](vitest-dev/vitest#9943) [<samp>(0f08d)</samp>](vitest-dev/vitest@0f08dda2c)
- **pretty-format**:
  - Limit output for large object  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6 (1M context)** in [#&#8203;9949](vitest-dev/vitest#9949) [<samp>(0d5f9)</samp>](vitest-dev/vitest@0d5f9d6ef)

#####     [View changes on GitHub](vitest-dev/vitest@v4.1.0...v4.1.1)

</details>

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My44NC4yIiwidXBkYXRlZEluVmVyIjoiNDMuOTEuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVub3ZhdGUiXX0=-->

See merge request swiss-armed-forces/cyber-command/cea/loom!411

Co-authored-by: persistent-chamoisee yield <persistent-chamoisee-yield-9fd-f86-2e0-f31d23b2e@swiss-armed-forces-open-source.ch>
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.

soft doesn't work for expect.soft(rejection).resolves

2 participants