-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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(cli): Support specifying a line number when filtering tests #6411
feat(cli): Support specifying a line number when filtering tests #6411
Conversation
✅ Deploy Preview for vitest-dev ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
Vitest has specs that describe the test behaviour: vitest/packages/vitest/src/node/core.ts Line 1083 in 83638eb
I would prefer if we passed down locations there to keep the scope clean and avoid polluting the config. |
As far as I can tell, I went with this approach as it is more similar to how |
We don't need to collect tests for this to work, spec defines what tests to run. This is the perfect place to tell Vitest to limit what test functions to run.
I know. This doesn't really explain why it should follow the same implementation. You can keep the filtering in the test like it is, but change how the values are passed down from the main process. |
I might be missing something. What kind of information do I have access to in a spec? How would I access the line numbers of a test? I see |
Spec is a specification, it doesn't have any information about the test or a file. It tells what file to run and how to run it.
Maybe you can populate the provided context somehow or inject the config value, that's up to you, but the processing should happen there. |
Do you mean that the issue at hand is not filtering inside
Is the issue that we should provide each worker with only the values that are relevant values to its files (unlike |
Yes. The
Yes, that's the idea. |
Yeah, that makes sense. I'll take a shot at it. |
I gave it a try. See 76bd921. Previous code will be removed of course. In I thought it would be a good idea to include the files with the location in the same object, instead of having them in their own attribute in the config and then matching based on the path or something. But I ended up having to modify types everywhere to get this to work. I had to modify Much of the code in this commit is hacked together, but I had to get something that somewhat works, sometimes, just to see if I'm on the right track. Would appreciate inputs on this before I commit to making more changes. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The general direction seems fine to me, but there are some changes that we cannot make because it would be a breaking change. Unless you want to have this merged in a year,
One thing I shouldn't be doing is parsing the filters in vitest/packages/vitest/src/node/cli/cac.ts Line 265 in 76bd921
If I were to do the parsing inside How about Instead of using an incompatible type like
This has been labelled a "nice to have", but I'm not sure I'll be here in a year :) |
I guess that would work but I don't understand why you need this if you will still parse it inside, right? |
I Forgot to add the declaration of export interface FileSpec {
file: string
testLocations: number[] | undefined
} The intention of this is to pass both the filepath and the |
Cleaned up a bit
I hope I'm in the right direction. Thank you for you time @sheremet-va! |
a4c4a04
to
83e103e
Compare
squashed and rebased. Should be up to date with main, will check it later. For now, I've added an error |
beba5a5
to
c7831bf
Compare
@sheremet-va Should be good, if you can take a look. Thanks you! |
There are issues in CI it seems. Something with benchmarking? |
Aha, thought it had to do with stuff not related to me, will look into it. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! We need more tests, all the tests now are using list
command
@@ -282,6 +331,53 @@ export function formatCollectedAsString(files: File[]) { | |||
}).flat() | |||
} | |||
|
|||
export function parseFilter(filter: string): Filter { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It doesn't seem like these two functions belong here because they are not used for the CLI specifically. Maybe create a separate file for them?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you think of vitest/src/node/filter.ts
?
packages/vitest/src/node/core.ts
Outdated
const dir = this.config.dir || this.config.root | ||
const parsedFilters = filters.map(f => parseFilter(f)) | ||
const testLocations = groupFilters(parsedFilters.map( | ||
f => ({ ...f, filename: resolve(dir, f.filename) }), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if it makes sense to validate that the path exists. Filters can be anything, you can provide a part of the file
I think we should throw an error if:
- There is a location in filters
- File is resolved with
process.cwd(), file
, notroot
(because filters are provides via a CLI normally) - File doesn't exist, or it's not a file at all (a directory for example)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting.
What came to mind is to limit matching to full filename, instead of part of it, in order not to match multiple files at the same time. Does that sound right to you?
Note that I'm passing the filters as is (before resolving) to project.globTestFiles
, and then I narrow the matching for filters with location specified. Later at line 1143, I'm skipping over reporting errors for filters that don't have location specified.
For now I'm just reporting error and continuing. Now that I'm thinking about it, this has weird behavior for example pnpm exec vitest basic.test.ts:3
would report an error about "not finding the file", but will run the tests anyways.
It seems I might be able to fix this by only resolving filters with test location and then passing on to project.globTestFiles
, does that sound right to you?
Good point on resolving with process.cwd()
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know if I follow what you want to do instead of what I proposed. Maybe you can build a prototype?
e505eeb
to
7a53882
Compare
7a53882
to
2d727fd
Compare
For the failing build, seems like it is caused by import of |
@@ -1,3 +1,4 @@ | |||
import type { FileSpec } from '@vitest/runner/types/runner' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@vitest/runner/types/runner
doesn't exist when built. you need to expose it in @vitest/runner
I don't know how this got over here.
- rebase issues
In `globTestSpecs`, test locations are matched with their test file by full path (`globTestFiles` returns full path). I think we should keep it this way because:(A) matching multiple files doesn't make much sense -- for example, `fileA.test.ts` might have test at line 21, but `fileB.test.ts` won't; and (B) this feature will be used in command line mostly, where entering full path is easy with autocomplete. Issue arises when location filter (let's say `file`) doesn't match a file by full path. Previously, I thought about dropping files `fileA.test.ts` and `fileB.test.ts`, and running the rest of the files but implementing this doesn't seem straightforward to me. For now, I'll be throwing error.
- Previous implementation failed on windows (drive letter detected as range location `D:/...`) - Add related test cases too
- Modify test case to use a file that doesn't exist instead
8a266d4
to
beed808
Compare
Thank you for keeping this PR up-to-date! |
Anytime! Was quite challenging (and fun) working on this, although I got busy with some stuff throughout. I hope I have the chance to contribute again. |
##### [v3.0.0](https://github.com/vitest-dev/vitest/releases/tag/v3.0.0) ##### 🚨 Breaking Changes - `spy.mockReset` changes - by [@Lordfirespeed](https://github.com/Lordfirespeed) in vitest-dev/vitest#6426 [<samp>(db7a8)</samp>](vitest-dev/vitest@db7a8888) - Pass down context to test hooks - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7034 [<samp>(82c2e)</samp>](vitest-dev/vitest@82c2e244) - Support Vite 6 - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7026 [<samp>(7abe8)</samp>](vitest-dev/vitest@7abe854c) - **coverage**: Always exclude test files - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7254 [<samp>(b5268)</samp>](vitest-dev/vitest@b5268965) - **deps**: Update fake-timers to v14.0.0 - by [@xxzefgh](https://github.com/xxzefgh) and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7097 [<samp>(c98b4)</samp>](vitest-dev/vitest@c98b4b1c) - **expect**: Check more properties for error equality - by [@hi-ogawa](https://github.com/hi-ogawa) and [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#5876 [<samp>(10023)</samp>](vitest-dev/vitest@100230e9) - **runner**: Support `describe(..., { shuffle: boolean })` and inherit from parent suite - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6670 [<samp>(aa1da)</samp>](vitest-dev/vitest@aa1dac3d) - **snapshot**: Reset snapshot state for `retry` and `repeats` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6817 [<samp>(e8ce9)</samp>](vitest-dev/vitest@e8ce94cf) - **spy**: SpyOn reuses mock if method is already spyed on - by [@sheremet-va](https://github.com/sheremet-va) and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6464 [<samp>(b3e43)</samp>](vitest-dev/vitest@b3e43d04) - **vitest**: Don't expose default toFake config - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6288 [<samp>(e3144)</samp>](vitest-dev/vitest@e3144fd8) ##### 🚀 Features - Support inline `diff` options and support `printBasicPrototype` - by [@hi-ogawa](https://github.com/hi-ogawa), [@sheremet-va](https://github.com/sheremet-va) and **Michał Grzegorzewski** in vitest-dev/vitest#6740 [<samp>(39186)</samp>](vitest-dev/vitest@391860f7) - Allow a custom note when calling `ctx.skip()` dynamically - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6805 [<samp>(697c3)</samp>](vitest-dev/vitest@697c35c5) - Allow inline workspace configuration - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6923 [<samp>(562e1)</samp>](vitest-dev/vitest@562e1b14) - Provide the current project to the global setup - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6942 [<samp>(a5bbc)</samp>](vitest-dev/vitest@a5bbc0a9) - Print project name as a label - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6925 [<samp>(a3bef)</samp>](vitest-dev/vitest@a3bef598) - Print a deprecation warning if suite or test uses object as the third argument - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7031 [<samp>(407f1)</samp>](vitest-dev/vitest@407f10e4) - Expose versions from `vitest/node` entry point and statically on Vitest - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7029 [<samp>(be8d4)</samp>](vitest-dev/vitest@be8d479b) - `diff.printBasicPrototype: false` by default - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7043 [<samp>(2b5c5)</samp>](vitest-dev/vitest@2b5c5201) - Prepare the Vitest API to be stable - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6962 [<samp>(9a1b5)</samp>](vitest-dev/vitest@9a1b5012) - Support Vite v6 in mocker package - by [@cexbrayat](https://github.com/cexbrayat) in vitest-dev/vitest#7058 [<samp>(96f47)</samp>](vitest-dev/vitest@96f47d37) - Allow multi-browser configuration - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6975 [<samp>(78b62)</samp>](vitest-dev/vitest@78b62ffe) - Add resolved project names to the reporter API - by [@userquin](https://github.com/userquin) in vitest-dev/vitest#7213 [<samp>(91758)</samp>](vitest-dev/vitest@91758360) - Introduce the new reporter API - by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7069 [<samp>(76662)</samp>](vitest-dev/vitest@766624ab) - Add `describe.for` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7253 [<samp>(0ad28)</samp>](vitest-dev/vitest@0ad2860b) - **api**: - Add onBrowserInit event - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7255 [<samp>(80ce0)</samp>](vitest-dev/vitest@80ce0e1c) - **browser**: - Support `actionTimeout` as playwright provider options - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6984 [<samp>(e2c29)</samp>](vitest-dev/vitest@e2c29eaf) - Support clipboard api `userEvent.copy, cut, paste` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6769 [<samp>(843a6)</samp>](vitest-dev/vitest@843a621e) - Implement locator.nth() - by [@xeger](https://github.com/xeger) and [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7137 [<samp>(38458)</samp>](vitest-dev/vitest@38458ea6) - **cli**: - Support excluding projects with `--project=!pattern` - by [@haines](https://github.com/haines) in vitest-dev/vitest#6924 [<samp>(ebfe9)</samp>](vitest-dev/vitest@ebfe942c) - Support specifying a line number when filtering tests - by [@mzhubail](https://github.com/mzhubail) and [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6411 [<samp>(4d94b)</samp>](vitest-dev/vitest@4d94b956) - Support location filters for suites - by [@mzhubail](https://github.com/mzhubail) in vitest-dev/vitest#7048 [<samp>(751e2)</samp>](vitest-dev/vitest@751e2dce) - **coverage**: - `thresholds` to support maximum uncovered items - by [@jonahkagan](https://github.com/jonahkagan) in vitest-dev/vitest#7061 [<samp>(bde98)</samp>](vitest-dev/vitest@bde98b6d) - **expect**: - Add `toHaveBeenCalledExactlyOnceWith` expect matcher - by [@jacoberdman2147](https://github.com/jacoberdman2147) and [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6894 [<samp>(ff662)</samp>](vitest-dev/vitest@ff66206a) - Add `toHaveBeenCalledAfter` and `toHaveBeenCalledBefore` utility - by [@Barbapapazes](https://github.com/Barbapapazes) and [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6056 [<samp>(85e6f)</samp>](vitest-dev/vitest@85e6f99f) - Add `toSatisfy` asymmetric matcher - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7022 [<samp>(f691a)</samp>](vitest-dev/vitest@f691ad76) - Add `toBeOneOf` matcher - by [@zirkelc](https://github.com/zirkelc) and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6974 [<samp>(3d742)</samp>](vitest-dev/vitest@3d742b2b) - **reporter**: - Add support for function type to classname option in the junit reporter - by [@jpleclerc](https://github.com/jpleclerc), **Jean-Philippe Leclerc** and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6839 [<samp>(dc238)</samp>](vitest-dev/vitest@dc238e92) - **reporters**: - `summary` option for `verbose` and `default` reporters - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6893 [<samp>(511b7)</samp>](vitest-dev/vitest@511b73c7) - **runner**: - Test context can inject values from the config's `provide` - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6813 [<samp>(85c64)</samp>](vitest-dev/vitest@85c64e35) - Add "queued" state - by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6931 [<samp>(5f8d2)</samp>](vitest-dev/vitest@5f8d2091) - **snapshot**: - Provide `config` to `resolveSnapshotPath` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6800 [<samp>(746d8)</samp>](vitest-dev/vitest@746d8986) - **ui**: - Allow run individual tests/suites from the UI - by [@userquin](https://github.com/userquin) in vitest-dev/vitest#6641 [<samp>(d9cc8)</samp>](vitest-dev/vitest@d9cc81dd) - Make clicking on a test in the UI open the report section and scroll to the test failure if applicable - by [@jacoberdman2147](https://github.com/jacoberdman2147) in vitest-dev/vitest#6900 [<samp>(1bf27)</samp>](vitest-dev/vitest@1bf27f0d) - Allow hide/show node_modules in module graph tab - by [@userquin](https://github.com/userquin) in vitest-dev/vitest#7217 [<samp>(50cf6)</samp>](vitest-dev/vitest@50cf61b8) - **vitest**: - Include `coverageMap` in json report - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6606 [<samp>(9c8f7)</samp>](vitest-dev/vitest@9c8f7e3e) - Add `onTestsRerun` method to global setup context - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6803 [<samp>(e26e0)</samp>](vitest-dev/vitest@e26e066c) ##### 🐞 Bug Fixes - Misc fix for vite 6 ecosystem ci - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6867 [<samp>(80f8b)</samp>](vitest-dev/vitest@80f8bbf4) - Respect `cacheDir` when optimizer is enabled - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6910 [<samp>(0b08b)</samp>](vitest-dev/vitest@0b08bc11) - Reset runningPromise after `finally` in case there is an error to avoid it getting stuck - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6951 [<samp>(02194)</samp>](vitest-dev/vitest@021944cd) - Revert support for Vite 6 - by [@sheremet-va](https://github.com/sheremet-va) [<samp>(fbe5c)</samp>](vitest-dev/vitest@fbe5c39d) - Support Node 21 - by [@sheremet-va](https://github.com/sheremet-va) [<samp>(92f7a)</samp>](vitest-dev/vitest@92f7a2ad) - Don't use `Custom` internally - by [@sheremet-va](https://github.com/sheremet-va) [<samp>(46fc5)</samp>](vitest-dev/vitest@46fc5340) - Don't use `Custom` internally" - by [@sheremet-va](https://github.com/sheremet-va) [<samp>(db19f)</samp>](vitest-dev/vitest@db19f6eb) - Don't use `Custom` type internally - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7032 [<samp>(7957f)</samp>](vitest-dev/vitest@7957f912) - Persist cli filters as watch mode file filter - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6955 [<samp>(cc703)</samp>](vitest-dev/vitest@cc703362) - Don't use dim color for succeeded tests - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7059 [<samp>(8a6f5)</samp>](vitest-dev/vitest@8a6f5f16) - Fix missing chai types - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7149 [<samp>(6a09c)</samp>](vitest-dev/vitest@6a09cc3b) - `cancelCurrentRun` awaits `runningPromise` - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7168 [<samp>(1dbf5)</samp>](vitest-dev/vitest@1dbf5140) - Add Locator typings for nth, first and last. - by [@xeger](https://github.com/xeger) in vitest-dev/vitest#7176 [<samp>(d262e)</samp>](vitest-dev/vitest@d262e059) - Batch console logs by microtask - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7183 [<samp>(53d1d)</samp>](vitest-dev/vitest@53d1d5f5) - Allow `getMockImplementation` to return "once" implementation - by [@chaptergy](https://github.com/chaptergy) in vitest-dev/vitest#7033 [<samp>(39125)</samp>](vitest-dev/vitest@3912554b) - `capturePrintError` logger duplicate event handlers - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7197 [<samp>(e89c3)</samp>](vitest-dev/vitest@e89c3693) - Allow slots in vitest-browser-vue - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7120 [<samp>(2319f)</samp>](vitest-dev/vitest@2319f849) - Reset root workspace project on restart - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7238 [<samp>(6e518)</samp>](vitest-dev/vitest@6e51843a) - Cleanup `vitest/reporters` entrypoint - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7241 [<samp>(aec0b)</samp>](vitest-dev/vitest@aec0b530) - Colors on `forks` pool - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7090 [<samp>(8cab9)</samp>](vitest-dev/vitest@8cab9601) - Export `VitestRunner` type from `vitest/runners` - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7240 [<samp>(9b218)</samp>](vitest-dev/vitest@9b218854) - Return test fn result to runner - by [@wmertens](https://github.com/wmertens) in vitest-dev/vitest#7239 [<samp>(48645)</samp>](vitest-dev/vitest@48645bf4) - Re-apply default conditions if using vite 6 or later - by [@thebanjomatic](https://github.com/thebanjomatic), **thebanjomatic** and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7071 [<samp>(84287)</samp>](vitest-dev/vitest@84287fc2) - Prevent infinite loop on prettyDOM calls - by [@tsirlucas](https://github.com/tsirlucas) in vitest-dev/vitest#7250 [<samp>(a3a46)</samp>](vitest-dev/vitest@a3a46a53) - **api**: - Don't report events during `vitest list` - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7257 [<samp>(1c2b2)</samp>](vitest-dev/vitest@1c2b210d) - **benchmark**: - Disable type testing while benchmarking - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7068 [<samp>(4e603)</samp>](vitest-dev/vitest@4e60333d) - Rewrite reporter without `log-update` - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7019 [<samp>(6d23f)</samp>](vitest-dev/vitest@6d23f4b1) - **browser**: - Improve source maps when `vi.mock` is present - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6810 [<samp>(8d179)</samp>](vitest-dev/vitest@8d179afc) - Explain TypeScript support in docs and add asymmetric matchers to types - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#6934 [<samp>(ac1a7)</samp>](vitest-dev/vitest@ac1a7fdc) - Fix matchers.d.ts - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6995 [<samp>(a485b)</samp>](vitest-dev/vitest@a485b32b) - Fix user event state on preview provider - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7041 [<samp>(8e944)</samp>](vitest-dev/vitest@8e94427e) - Fix provider options types - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7115 [<samp>(579bd)</samp>](vitest-dev/vitest@579bda97) - Only use locator.element on last expect.element attempt - by [@tsirlucas](https://github.com/tsirlucas) in vitest-dev/vitest#7139 and vitest-dev/vitest#7152 [<samp>(847d3)</samp>](vitest-dev/vitest@847d3221) - Use correct project when filtering `entries` in the browser mode - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7167 [<samp>(423d6)</samp>](vitest-dev/vitest@423d6345) - Fix `console.time` with fake timers - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7207 [<samp>(903f3)</samp>](vitest-dev/vitest@903f3b9b) - Add instance validation to resolve coverage error - by [@DevJoaoLopes](https://github.com/DevJoaoLopes) and [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7231 [<samp>(1e791)</samp>](vitest-dev/vitest@1e7915b5) - **coverage**: - Exclude browser mode iframe results - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6905 [<samp>(e04a1)</samp>](vitest-dev/vitest@e04a1368) - Correct coverage when `isolate: false` is used - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6957 [<samp>(426ce)</samp>](vitest-dev/vitest@426ce6d8) - Prevent crash when v8 incorrectly merges static_initializer's - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7150 [<samp>(cb6db)</samp>](vitest-dev/vitest@cb6db13e) - **deps**: - Update all non-major dependencies - in vitest-dev/vitest#7085 [<samp>(8cc92)</samp>](vitest-dev/vitest@8cc92c2f) - Update all non-major dependencies - in vitest-dev/vitest#7116 [<samp>(de5ce)</samp>](vitest-dev/vitest@de5ce3d9) - Update dependency pathe to v2 - in vitest-dev/vitest#7181 [<samp>(74dbe)</samp>](vitest-dev/vitest@74dbe03f) - **diff**: - Truncate to avoid crash on diff large objects - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7133 [<samp>(2a9d6)</samp>](vitest-dev/vitest@2a9d67a2) - **junit**: - Fix testsuites time to be sum of all testsuite items - by [@saitonakamura](https://github.com/saitonakamura) in vitest-dev/vitest#6985 [<samp>(ca37a)</samp>](vitest-dev/vitest@ca37a06a) - **pretty-format**: - Support react 19 - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6909 [<samp>(bd29b)</samp>](vitest-dev/vitest@bd29bcc7) - **reporters**: - Write buffered stdout/stderr on process exit - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6932 [<samp>(80cde)</samp>](vitest-dev/vitest@80cde2a0) - Rewrite `dot` reporter without `log-update` - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6943 [<samp>(be969)</samp>](vitest-dev/vitest@be969cfb) - Check `--hideSkippedTests` in base reporter - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#6988 [<samp>(721a5)</samp>](vitest-dev/vitest@721a5b84) - Show `retry` and `repeats` counts - by [@AriPerkkio](https://github.com/AriPerkkio) and [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7004 [<samp>(3496a)</samp>](vitest-dev/vitest@3496a015) - **runner**: - Long synchronous tasks does not time out - by [@ferdodo](https://github.com/ferdodo) and [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#2920 and vitest-dev/vitest#6944 [<samp>(2fb58)</samp>](vitest-dev/vitest@2fb585ae) - Mark tests of `describe.todo` as `'todo'` - by [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7171 [<samp>(1d458)</samp>](vitest-dev/vitest@1d458955) - **snapshot**: - Fix "obsolete" message on snapshot update re-run - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7129 [<samp>(c2beb)</samp>](vitest-dev/vitest@c2beb8ca) - Preserve white space of `toMatchFileSnapshot` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7156 [<samp>(a437b)</samp>](vitest-dev/vitest@a437b656) - Fix obsoleteness check of `toMatchSnapshot("...")` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7126 [<samp>(ac9ba)</samp>](vitest-dev/vitest@ac9ba151) - **typecheck**: - Fix typecheck collect on Vite 6 - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6972 [<samp>(7b35d)</samp>](vitest-dev/vitest@7b35d13a) - Use unique temp and tsbuildinfo file for each tsconfig file - by [@masnormen](https://github.com/masnormen) in vitest-dev/vitest#7107 and vitest-dev/vitest#7112 [<samp>(61b30)</samp>](vitest-dev/vitest@61b30162) - Fix error test case mapping for `@ts-expect-error` - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7125 [<samp>(27d34)</samp>](vitest-dev/vitest@27d340aa) - **types**: - Make parameters non-nullable for Playwright options - by [@apple-yagi](https://github.com/apple-yagi) in vitest-dev/vitest#6989 [<samp>(fe2a1)</samp>](vitest-dev/vitest@fe2a187f) - **ui**: - Wrong module graph when generating html.meta.json.gz in browser mode - by [@userquin](https://github.com/userquin) in vitest-dev/vitest#7214 [<samp>(dccdd)</samp>](vitest-dev/vitest@dccdd550) - Add errors and draft state (\*) to the code editor - by [@userquin](https://github.com/userquin) in vitest-dev/vitest#7044 [<samp>(faca4)</samp>](vitest-dev/vitest@faca4de8) - **vite-node**: - Fix error stack on Windows - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#6786 [<samp>(bf7b3)</samp>](vitest-dev/vitest@bf7b36ac) - Properly normalize file url import - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7087 [<samp>(31675)</samp>](vitest-dev/vitest@31675e3b) - Fix mandatory node prefix - by [@hi-ogawa](https://github.com/hi-ogawa) in vitest-dev/vitest#7179 [<samp>(b6284)</samp>](vitest-dev/vitest@b6284642) - **watch**: - Don't indicate exit when no matching files - by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in vitest-dev/vitest#7246 [<samp>(003c0)</samp>](vitest-dev/vitest@003c0bef) - **workspace**: - `extends: true` correctly inherits all root config properties - by [@sheremet-va](https://github.com/sheremet-va) in vitest-dev/vitest#7232 [<samp>(798c0)</samp>](vitest-dev/vitest@798c0da2) ##### [View changes on GitHub](vitest-dev/vitest@v2.1.8...v3.0.0)
Description
closes #5445.
Added a function to parse filters into
{ filename, lineNumber? }
. The function attempts to parse each filter with the format<filename>:<line_number>
. If succssful,lineNumber
is set, and we have a "location filter", otherwise line number is not set and the filter is treated as a regular filter.Added
locationFilters
toUserConfig
and toVitestRunnerConfig
.Note that the we only store filters that have
lineNumber
, in order to use them ininterpretTaskModes
.The parsing is done in
cac.ts:start
because that's the place where we have access to both the options and filters.I think I know where to do stuff for the most part, but I need help with some stuff:
I'm not sure how to report errors in case the user included a range instead of a line number.
I'm not happy with my use of
Required
inRequired<Filter[]>
, but I'm not sure what would be a better way to do it.I think we should match filename strictly when location filter is provided, but I'm not sure how to. Should I be using something similar to
WorkspaceProject.filterFiles()
?As for printing an error when the user provides a wrong line number, it's a bit tough withinterpretTaskModes
being a recursive a function. What I have in mind is to keep track of all the filters and wether it was matched or not, and print out errors once we've been through all the tests.The part I'm having an issue with is where to keep track of that. That would involve major changes to howinterpretTaskModes
is written. I could move theSee 36c88e9
Please don't delete this checklist! Before submitting the PR, please make sure you do the following:
pnpm-lock.yaml
unless you introduce a new test example.Tests
pnpm test:ci
.Documentation
pnpm run docs
command.Changesets
feat:
,fix:
,perf:
,docs:
, orchore:
.