Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: onTestFailed hook #2210

Merged
merged 2 commits into from Nov 7, 2022
Merged

feat: onTestFailed hook #2210

merged 2 commits into from Nov 7, 2022

Conversation

antfu
Copy link
Member

@antfu antfu commented Oct 26, 2022

import { expect, it, onTestFailed } from 'vitest'

it('on-failed', () => {
  const square3 = 3 ** 2
  const square4 = 4 ** 2

  onTestFailed(() => {
    console.log('Unexpected error encountered, internal states:', { square3, square4 })
  })

  expect(Math.sqrt(square3 + square4)).toBe(4)
})

Motivation

It's common we use tests to debug our implementation. When debugging, we might want to inspect the intermediate state to see what is going on internally. While they are useful in debugging, it's could be noisy to print them when the test passes as expected.

Thus I propose to introduce an onTestFailed hook, so you can have a chance to execute some code before the test suite gets killed - with access to the internal closure. Like printing the state, doing some cleanup, or dumping something into the file system, etc. This might help you to identify the issue earlier when reading the CI output.

Details

onTestFailed is provided as a global API and also in the test context, with access to local closure. Similar to other hooks, it can be called multiple times to register multiple listeners. When passing an async function, it will be awaited sequentially.

Alternatives

  • Expose this hook global from the package import { onTestFailed } from 'vitest' - we might still need it in the context as it might not work in concurrent tests. Implemented
  • Expose this hook as an attribute of expect -> expect.onTestFailed() - the semantic feels a bit weird, but we could reuse it for concurrent.

@antfu antfu added enhancement New feature or request request for comments labels Oct 26, 2022
@privatenumber
Copy link

I like that it's a simple yet elegant solution to debugging large test suites that have race conditions. I can imagine this coming in handy in unreliable tests that sometimes fail but can't be easily reproduced. I also love that this idea is framework agnostic.

Drawbacks:

  • The hook can only be registered before the error throws.

    • Using the hook may be limited to tests that are separated by setup vs assertions, so the hook must be registered in between.
    • This limitation can be confusing for devs that don't realize where the error is coming from, and lead them to wonder why it's not triggering the hook.
    • It might be possible to work around this by statically extracting the hook function, but that may be too expensive and too magical.
  • It encourages debugging code to be left inside test files.

    • This may not necessarily be bad if it's kept organized, but I can imagine a lot of just-in-case logs being left in. The debugging code might not be very reusable because it needs access to the closure.
    • It can also make it more acceptable to merge in unstable tests via "we'll debug it later as it runs on CI".

I would design the API to be more targeted for last resorts, and discourage frequent usage by:

  • Emitting a warning that a hook was registered but not triggered.
  • Have a config option to limit the number of them.
  • Naming it something specific & discouraging (e.g. shamefullyDebugOnFail() inspired by pnpm's shamefully-hoist).

@antfu
Copy link
Member Author

antfu commented Oct 26, 2022

Thanks for the feedback!

The hook can only be registered before the error throws.

I think this is necessary due to the nature of JS. Hoisting might not be a good option as it requires accessing the closure and you can't know what variables are available from arbitrary crashing points.

It encourages debugging code to be left inside test files.

As you said, it's not necessarily a bad thing. The reason I call it onTestFailed in a more neutral way instead of debugOnFail is that it's not necessarily related to debugging. It can be a cleanup like releasing some resources or closing the server etc. A bit like a test level try...catch...finally.
If it's really a concern to some teams, we could introduce flags similar to --no-only for CI, or have an eslint rule to warn it. shamefully sounds a bit too much to me.

@antfu antfu merged commit 637c85d into main Nov 7, 2022
@antfu antfu deleted the feat/on-failed-hook branch November 7, 2022 12:00
renovate bot added a commit to fwouts/previewjs that referenced this pull request Nov 10, 2022
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vitest](https://togithub.com/vitest-dev/vitest) | [`0.24.5` ->
`0.25.1`](https://renovatebot.com/diffs/npm/vitest/0.24.5/0.25.1) |
[![age](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/compatibility-slim/0.24.5)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/confidence-slim/0.24.5)](https://docs.renovatebot.com/merge-confidence/)
|
| [vitest](https://togithub.com/vitest-dev/vitest) | [`0.24.3` ->
`0.25.1`](https://renovatebot.com/diffs/npm/vitest/0.24.3/0.25.1) |
[![age](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/compatibility-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/confidence-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v0.25.1`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.1)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.25.0...v0.25.1)

#####    🚀 Features

- Add `vi.setConfig` helper  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2293
- Allow hooks to be executed in a stack or list  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2294

#####    🐞 Bug Fixes

- Always rewrite defined jsdom keys  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2290
- Default reporter regression  -  by
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2292
- Don't fail `bench` when using options  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2295

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.25.0...v0.25.1)

###
[`v0.25.0`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.0)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.5...v0.25.0)

#####    ✅ Builtin TypeChecking

In v0.25.0, Vitest allows you to write tests for your types, using
`expectTypeOf` or `assertType` syntaxes. By default all tests inside
`*.test-d.ts` files are considered type tests. Run `vitest typecheck` to
run type tests.

```ts
// my.test-d.ts
import { assertType, expectTypeOf } from 'vitest'
import { mount } from './mount.js'

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction()
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>()

  // @&#8203;ts-expect-error name is a string
  assertType(mount({ name: 42 }))
})
```

Learn more at [the
documentation](https://vitest.dev/guide/testing-types.html) and this
[RFC](https://togithub.com/vitest-dev/vitest/issues/1954)

#####    🚨 Breaking Changes

- Return context in `startVitest()`  -  by
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2072

#####    🚀 Features

- `onTestFailed` hook  -  by [@&#8203;antfu](https://togithub.com/antfu)
in
[vitest-dev/vitest#2210
- Display error frame if present (like Vite)  -  by
[@&#8203;haikyuu](https://togithub.com/haikyuu) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2257
- Benchmark table report  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2179
- Add typechecking functionality  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2107

#####    🐞 Bug Fixes

- Clear full screen only in watch mode  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va)
[<samp>(c3d89)</samp>](https://togithub.com/vitest-dev/vitest/commit/c3d89504)
- Don't serialize symbols and immutables  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2266
- Use --conditions instead of -C  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2267
- Show correct stack trace in errors and console  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2248
- Align `.each` behavior with jest  -  by
[@&#8203;bartoszgolebiowski](https://togithub.com/bartoszgolebiowski)
and [@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2064
- Remove undefined values in options  -  by
[@&#8203;g4rry420](https://togithub.com/g4rry420) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2281
- **coverage**: Istanbul provider to preserve implicit else  -  by
[@&#8203;AriPerkkio](https://togithub.com/AriPerkkio) in
[vitest-dev/vitest#2275

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.5...v0.25.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/fwouts/previewjs).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzQuMTkuMCJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
ivarconr pushed a commit to Unleash/unleash that referenced this pull request Nov 10, 2022
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vitest](https://togithub.com/vitest-dev/vitest) | [`0.24.3` ->
`0.25.1`](https://renovatebot.com/diffs/npm/vitest/0.24.3/0.25.1) |
[![age](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/compatibility-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/vitest/0.25.1/confidence-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v0.25.1`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.1)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.25.0...v0.25.1)

#####    🚀 Features

- Add `vi.setConfig` helper  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2293
- Allow hooks to be executed in a stack or list  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2294

#####    🐞 Bug Fixes

- Always rewrite defined jsdom keys  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2290
- Default reporter regression  -  by
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2292
- Don't fail `bench` when using options  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2295

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.25.0...v0.25.1)

###
[`v0.25.0`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.0)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.5...v0.25.0)

#####    ✅ Builtin TypeChecking

In v0.25.0, Vitest allows you to write tests for your types, using
`expectTypeOf` or `assertType` syntaxes. By default all tests inside
`*.test-d.ts` files are considered type tests. Run `vitest typecheck` to
run type tests.

```ts
// my.test-d.ts
import { assertType, expectTypeOf } from 'vitest'
import { mount } from './mount.js'

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction()
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>()

  // @&#8203;ts-expect-error name is a string
  assertType(mount({ name: 42 }))
})
```

Learn more at [the
documentation](https://vitest.dev/guide/testing-types.html) and this
[RFC](https://togithub.com/vitest-dev/vitest/issues/1954)

#####    🚨 Breaking Changes

- Return context in `startVitest()`  -  by
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2072

#####    🚀 Features

- `onTestFailed` hook  -  by [@&#8203;antfu](https://togithub.com/antfu)
in
[vitest-dev/vitest#2210
- Display error frame if present (like Vite)  -  by
[@&#8203;haikyuu](https://togithub.com/haikyuu) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2257
- Benchmark table report  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2179
- Add typechecking functionality  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2107

#####    🐞 Bug Fixes

- Clear full screen only in watch mode  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va)
[<samp>(c3d89)</samp>](https://togithub.com/vitest-dev/vitest/commit/c3d89504)
- Don't serialize symbols and immutables  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2266
- Use --conditions instead of -C  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2267
- Show correct stack trace in errors and console  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2248
- Align `.each` behavior with jest  -  by
[@&#8203;bartoszgolebiowski](https://togithub.com/bartoszgolebiowski)
and [@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2064
- Remove undefined values in options  -  by
[@&#8203;g4rry420](https://togithub.com/g4rry420) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2281
- **coverage**: Istanbul provider to preserve implicit else  -  by
[@&#8203;AriPerkkio](https://togithub.com/AriPerkkio) in
[vitest-dev/vitest#2275

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.5...v0.25.0)

###
[`v0.24.5`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.24.5)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.4...v0.24.5)

#####    🚀 Features

- **vite-node**: Trigger beforeFullReload / beforePrune / invalidate
hook  -  by [@&#8203;ycmjason](https://togithub.com/ycmjason) in
[vitest-dev/vitest#2079

#####    🐞 Bug Fixes

- Respect folders with dot at the start, when mocking  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2244
- Prevent using mocks in rpc  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2254
- Show actual unhandled errors, serialize DOMErrors  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2253
- Load deps reporter  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2249

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.4...v0.24.5)

###
[`v0.24.4`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.24.4)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.3...v0.24.4)

#####    🚀 Features

- **vite-node**: Don't exit on uncaughtException in watch mode  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2186

#####    🐞 Bug Fixes

- Add/Update `repository` properties in `package.json`  -  by
[@&#8203;silverwind](https://togithub.com/silverwind) in
[vitest-dev/vitest#2151
- Ignore benchmark.reporters in getSerializableConfig  -  by
[@&#8203;kainstar](https://togithub.com/kainstar) in
[vitest-dev/vitest#2164
- Improve config's default exclude  -  by
[@&#8203;haikyuu](https://togithub.com/haikyuu) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2188
- Always use node condition  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#1919
- Clear terminal output before running tests, show errors in correct
order  -  by [@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2228
- Improve compatibility with native Node CJS resolution  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2226
- Don't use resolved paths if they don't actually exist  -  by
[@&#8203;simon-abbott](https://togithub.com/simon-abbott) in
[vitest-dev/vitest#1868
-   **cli**:
- Set inputNamePattern to RegExp source instead of string  -  by
[@&#8203;rafedramzi](https://togithub.com/rafedramzi) in
[vitest-dev/vitest#2201
- Normalize argument path  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2180
-   **coverage**:
- Trim URL parameters from file paths in istanbul coverage  -  by
[@&#8203;AriPerkkio](https://togithub.com/AriPerkkio) in
[vitest-dev/vitest#2232
- Trim URL parameters from file paths in c8 coverage  -  by
[@&#8203;OrestHk](https://togithub.com/OrestHk) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2181
-   **reporter**:
- Load custom reporter using `executeFile`  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2184
-   **vitest**:
- Return detailed error when using toHaveReturnedWith  -  by
[@&#8203;azaleta](https://togithub.com/azaleta) in
[vitest-dev/vitest#2163

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.3...v0.24.4)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzQuMTkuMCJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
andipaetzold pushed a commit to andipaetzold/react-firehooks that referenced this pull request Nov 25, 2022
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@vitest/coverage-c8](https://togithub.com/vitest-dev/vitest) |
[`0.24.3` ->
`0.25.3`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-c8/0.24.3/0.25.3)
|
[![age](https://badges.renovateapi.com/packages/npm/@vitest%2fcoverage-c8/0.25.3/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/@vitest%2fcoverage-c8/0.25.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/@vitest%2fcoverage-c8/0.25.3/compatibility-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/@vitest%2fcoverage-c8/0.25.3/confidence-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
| [vitest](https://togithub.com/vitest-dev/vitest) | [`0.24.3` ->
`0.25.3`](https://renovatebot.com/diffs/npm/vitest/0.24.3/0.25.3) |
[![age](https://badges.renovateapi.com/packages/npm/vitest/0.25.3/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/vitest/0.25.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/vitest/0.25.3/compatibility-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/vitest/0.25.3/confidence-slim/0.24.3)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v0.25.3`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.3)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.25.2...v0.25.3)

#####    🚀 Features

- Test.each support string template  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2337
[<samp>(f7897)</samp>](https://togithub.com/vitest-dev/vitest/commit/f7897765)

#####    🐞 Bug Fixes

- Junit consistently puts "skipped" inside "testcase"  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va)
[<samp>(f7b27)</samp>](https://togithub.com/vitest-dev/vitest/commit/f7b27af0)
- Detect tests in folders starting with `.`  -  by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[vitest-dev/vitest#2344
and
[vitest-dev/vitest#2359
[<samp>(c3951)</samp>](https://togithub.com/vitest-dev/vitest/commit/c395177f)
- **cli**: Don't override config by setting cli options to undefined  - 
by [@&#8203;rmehner](https://togithub.com/rmehner) in
[vitest-dev/vitest#2330
[<samp>(6ce3e)</samp>](https://togithub.com/vitest-dev/vitest/commit/6ce3ed7f)
- **coverage**: Env-replacer to add filenames into sourcemaps  -  by
[@&#8203;AriPerkkio](https://togithub.com/AriPerkkio) in
[vitest-dev/vitest#2338
[<samp>(a2e9d)</samp>](https://togithub.com/vitest-dev/vitest/commit/a2e9daf6)
- **mocker**: Clear automocked modules on unmock  -  by
[@&#8203;mcous](https://togithub.com/mcous) in
[vitest-dev/vitest#2353
[<samp>(60918)</samp>](https://togithub.com/vitest-dev/vitest/commit/609185bd)

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.25.2...v0.25.3)

###
[`v0.25.2`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.2)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.25.1...v0.25.2)

#####    🐞 Bug Fixes

- Dates are equal, if both are invalid  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2326
- Don't ignore properties, when put on a default function in CJS context
 -  by [@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2325

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.25.1...v0.25.2)

###
[`v0.25.1`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.1)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.25.0...v0.25.1)

#####    🚀 Features

- Add `vi.setConfig` helper  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2293
- Allow hooks to be executed in a stack or list  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2294

#####    🐞 Bug Fixes

- Always rewrite defined jsdom keys  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2290
- Default reporter regression  -  by
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2292
- Don't fail `bench` when using options  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2295

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.25.0...v0.25.1)

###
[`v0.25.0`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.25.0)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.5...v0.25.0)

#####    ✅ Builtin TypeChecking

In v0.25.0, Vitest allows you to write tests for your types, using
`expectTypeOf` or `assertType` syntaxes. By default all tests inside
`*.test-d.ts` files are considered type tests. Run `vitest typecheck` to
run type tests.

```ts
// my.test-d.ts
import { assertType, expectTypeOf } from 'vitest'
import { mount } from './mount.js'

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction()
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>()

  // @&#8203;ts-expect-error name is a string
  assertType(mount({ name: 42 }))
})
```

Learn more at [the
documentation](https://vitest.dev/guide/testing-types.html) and this
[RFC](https://togithub.com/vitest-dev/vitest/issues/1954)

#####    🚨 Breaking Changes

- Return context in `startVitest()`  -  by
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2072

#####    🚀 Features

- `onTestFailed` hook  -  by [@&#8203;antfu](https://togithub.com/antfu)
in
[vitest-dev/vitest#2210
- Display error frame if present (like Vite)  -  by
[@&#8203;haikyuu](https://togithub.com/haikyuu) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2257
- Benchmark table report  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2179
- Add typechecking functionality  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2107

#####    🐞 Bug Fixes

- Clear full screen only in watch mode  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va)
[<samp>(c3d89)</samp>](https://togithub.com/vitest-dev/vitest/commit/c3d89504)
- Don't serialize symbols and immutables  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2266
- Use --conditions instead of -C  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2267
- Show correct stack trace in errors and console  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2248
- Align `.each` behavior with jest  -  by
[@&#8203;bartoszgolebiowski](https://togithub.com/bartoszgolebiowski)
and [@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2064
- Remove undefined values in options  -  by
[@&#8203;g4rry420](https://togithub.com/g4rry420) and
[@&#8203;antfu](https://togithub.com/antfu) in
[vitest-dev/vitest#2281
- **coverage**: Istanbul provider to preserve implicit else  -  by
[@&#8203;AriPerkkio](https://togithub.com/AriPerkkio) in
[vitest-dev/vitest#2275

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.5...v0.25.0)

###
[`v0.24.5`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.24.5)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.4...v0.24.5)

#####    🚀 Features

- **vite-node**: Trigger beforeFullReload / beforePrune / invalidate
hook  -  by [@&#8203;ycmjason](https://togithub.com/ycmjason) in
[vitest-dev/vitest#2079

#####    🐞 Bug Fixes

- Respect folders with dot at the start, when mocking  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2244
- Prevent using mocks in rpc  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2254
- Show actual unhandled errors, serialize DOMErrors  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2253
- Load deps reporter  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2249

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.4...v0.24.5)

###
[`v0.24.4`](https://togithub.com/vitest-dev/vitest/releases/tag/v0.24.4)

[Compare
Source](https://togithub.com/vitest-dev/vitest/compare/v0.24.3...v0.24.4)

#####    🚀 Features

- **vite-node**: Don't exit on uncaughtException in watch mode  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2186

#####    🐞 Bug Fixes

- Add/Update `repository` properties in `package.json`  -  by
[@&#8203;silverwind](https://togithub.com/silverwind) in
[vitest-dev/vitest#2151
- Ignore benchmark.reporters in getSerializableConfig  -  by
[@&#8203;kainstar](https://togithub.com/kainstar) in
[vitest-dev/vitest#2164
- Improve config's default exclude  -  by
[@&#8203;haikyuu](https://togithub.com/haikyuu) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2188
- Always use node condition  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#1919
- Clear terminal output before running tests, show errors in correct
order  -  by [@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2228
- Improve compatibility with native Node CJS resolution  -  by
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2226
- Don't use resolved paths if they don't actually exist  -  by
[@&#8203;simon-abbott](https://togithub.com/simon-abbott) in
[vitest-dev/vitest#1868
-   **cli**:
- Set inputNamePattern to RegExp source instead of string  -  by
[@&#8203;rafedramzi](https://togithub.com/rafedramzi) in
[vitest-dev/vitest#2201
- Normalize argument path  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2180
-   **coverage**:
- Trim URL parameters from file paths in istanbul coverage  -  by
[@&#8203;AriPerkkio](https://togithub.com/AriPerkkio) in
[vitest-dev/vitest#2232
- Trim URL parameters from file paths in c8 coverage  -  by
[@&#8203;OrestHk](https://togithub.com/OrestHk) and
[@&#8203;sheremet-va](https://togithub.com/sheremet-va) in
[vitest-dev/vitest#2181
-   **reporter**:
- Load custom reporter using `executeFile`  -  by
[@&#8203;poyoho](https://togithub.com/poyoho) in
[vitest-dev/vitest#2184
-   **vitest**:
- Return detailed error when using toHaveReturnedWith  -  by
[@&#8203;azaleta](https://togithub.com/azaleta) in
[vitest-dev/vitest#2163

#####     [View changes on
GitHub](https://togithub.com/vitest-dev/vitest/compare/v0.24.3...v0.24.4)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

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

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/andipaetzold/react-firehooks).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC45LjIiLCJ1cGRhdGVkSW5WZXIiOiIzNC4zMC4yIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants