Repository navigation
v0.9.0
Minor Changes
-
#88
2d370c9- Bun 1.2.23 and newer:--framework bun, also found from a package.json script that runsbun testor a
bunfig.toml. Its version comes from.bun-version,packageManagerorengines.bun, else@types/bunor
bun-types. The scan reads Bun's globals and imports ofbun:test,@jest/globalsandvitest, which Bun rewrites;
chains of.skip,.todo,.failing,.only,.concurrent,.serialand.eachin any order, refusing the
combinations Bun refuses; the conditions.if,.skipIf,.todoIf,.failingIf,.concurrentIfand.serialIf;
options second or third, a number as the timeout or{ timeout, retry, repeats }; and.eachtitles as Bun formats
them. The files are Bun's*.test.*,*_test.*,*.spec.*and*_spec.*underbunfig.toml's[test] root, less
pathIgnorePatterns, with itsretryandconcurrentTestGlobapplied. A small TOML reader readsbunfig.toml.The oldest version a framework supports may now name a patch, as Bun's 1.2.23 does.
-
#87
ae2bd90-dependencyHashfollows imports through the config a file runs with: Vite'sresolve.aliasand Vitest's
test.alias, as an object or a list of{ find, replacement }with a name or a regex, and Jest'smoduleNameMapper,
modulePathsandmoduleDirectories, with<rootDir>. They were read from tsconfigpathsonly, so tests that
imported through such aliases hadhasUnfollowedDependenciesand a hash that missed those files. A mapping to no file
is adependency-not-followedwarning that names it. -
#83
9ef9c59- Cypress 13 and newer:--framework cypress, also found from acypresspackage or acypress.config.*file. Tests are
read as Mocha's, with Cypress's test config before the function:retries, of whichcypress runtakesrunMode,
browseras a skip condition,@cypress/grep'stags, and from Cypress 16 an error forenv, which Cypress refuses
there.this.timeout()is not read, as Cypress has only command timeouts;this.retries()in a describe and
.retries()afterit()ordescribe()are errors, as Cypress throws on them while it loads the spec. The config's
testing types are the projects,e2eandcomponent, each with itsspecPattern,excludeSpecPatternandretries.A project whose package.json lists
cypressnext to another runner, as Jest or Vitest for unit tests, now needs
--framework, as the scan asks for one whenever it finds several runners. -
#82
04e7328- Jasmine 4 and newer:--framework jasmine, also found from ajasmineorkarma-jasminepackage or a
spec/support/jasmine.*config. The scan readsdescribe,itand theirxandfforms with Jasmine's focus, a
spec without a function as pending,pending(reason)in a spec or itsbeforeEachorafterEach, from Jasmine 7
notApplicable(reason), the hooks, and a spec's timeout. The config'sspec_dirandspec_files, with!
exclusions, decide the files; without a config, as in Karma and Angular projects, the files given by glob run. A call
Jasmine refuses stops the whole run at the top level of a file, and is an error that leaves the file's tests as they
are inside a describe, which Jasmine catches. -
#81
85fb8a9- Mocha 10 and newer:--framework mocha, also found from amochapackage, a.mocharc.*file or amochakey in
package.json. The scan readsdescribe,context,it,specify, theirxforms,.onlyand.skip, a test
without a function as pending,ui: tdd'ssuiteandtest, the hooks,this.timeout(),this.retries()and
this.skip()wherethisis Mocha's, and.timeout()and.retries()afterit()anddescribe(). The config's
spec,extension,recursive,ignoreandfiledecide the files, and itstimeoutandretriesapply to every
test; a YAML config is read too. A describe without a function,it()ordescribe()without a title, and an
unknown chain such asit.concurrentare errors, as Mocha then runs no test.A project whose package.json lists
mochanext to another runner now needs--framework, as the scan asks for one
whenever it finds several runners. -
#86
1085fb7- node:test on Node.js 22 and newer:--framework node, also found from a package.json script that runsnode --test
or anode.config.json. Its version is the Node.js version the project pins in.node-version,.nvmrc, Volta's
nodeorengines.node. The scan readstest,it,describeandsuitefromnode:test, imported or required,
with.skip,.todo,.onlyand from 24.14.expectFailure, and the optionsskip,todo,only,timeout,
concurrency,expectFailureand from 24.19 and 26.2tags;t.skip()andt.todo()in a test's body; and the
hooks. The files are those the script givesnode --test, or Node.js's default patterns, with TypeScript files from
22.18.A test declared in a test's body, with
t.test()ortest(), is a subtest that node:test runs while it runs the test:
it is listed with the test's title insuitePathand the test's id in the new keyparentTestId, which isnullfor
every other test. -
#80
cae53c1- A newinvalid-fixture-argumenterror: a rest property among a Playwright function's fixture arguments, as
async ({ page, ...fixtures }) => {}in a test, hook,test.skip()condition ortest.extend()fixture written in
the test file. Playwright refuses it and runs no tests at all, so the file's tests are nownotLoadedinstead of
active. A nested rest, as({ page: { mouse, ...pointer } }), and atest.step()callback are allowed, as
Playwright allows them. -
#85
90df9aa-scan()takes asignal, anAbortSignal: the scan checks it before it starts and between files, and rejects with
the signal'sreasononce it aborts, so a server can stop a scan its client no longer waits for. -
#85
90df9aa- A Vitest.onlythatallowOnlymakes fail is aforbidden-onlydiagnostic, as for Playwright'sforbidOnly: an
error when the config setstest.allowOnlytofalse, and a warning when it is unset, as Vitest then turns it off in
CI, or depends on a condition. Vitest marks such a test failed instead of running it. -
#84
c68bac7- WebdriverIO 9 and newer:--framework webdriverio, also found from a@wdio/clipackage or awdio.conf.*file. The
config'sconfigexport, ES or CommonJS, decides the files:specs, with the nested lists that group files into one
worker, lessexclude, matched as WebdriverIO matches them. Itsframeworkdecides how the tests are read, Mocha by
default or Jasmine, withmochaOpts.timeout,retriesandui, orjasmineOpts.defaultTimeoutInterval, on every
test; Cucumber is reported, as its feature files aren't read. A number after a test's function is WebdriverIO's retry
count, and with Jasmine a second one, after the timeout. Mocha's and Jasmine's version gates follow the versions
WebdriverIO depends on. With Mocha, a call the runner refuses stops the file loading there, and the tests declared
above it still run. The config'srootDirand each capability's ownspecsandexcludeare read too.A project whose package.json lists
@wdio/clinext to another runner now needs--framework, as the scan asks for
one whenever it finds several runners.
Patch Changes
-
#85
90df9aa-expectCountcounts Playwright'sexpect.configure(...), called in place asexpect.configure({ timeout: 5_000 })(locator)
or kept in a variable asconst slowExpect = expect.configure(...); it missed both. -
#83
9ef9c59- The error for an unknownframeworkoption or--frameworkvalue names every runner the scan reads; it still named
only Playwright, Vitest and Jest. -
#89
fd4b13a---helpnames all nine runners--frameworktakes, and says which files node:test and Bun run without globs. -
#80
cae53c1- A helper that takes a test's function as a parameter, asfunction settlementTest(desk, body) { describe(desk, () => test('settles', body)); }, no longer gets a falsenested-testwarning. The scan read the parameter as the helper
itself, and so read the helper's own describe as declared inside the test. -
#78
1aea8a7- oxc-parser is updated from 0.156.0 to 0.157.0. The scan output doesn't change, except that a.jsfile with
TypeScript-only syntax, such asexport default abstract classor an optional class member, now gets aparse-error, as
Node.js would refuse to load it. -
#80
cae53c1- A test or describe call with a title the runner refuses, written inside a test or hook body, is now anested-test
warning, not an error that says the runner fails the file. Jest's own suite callsit('test1')inside
expect(() => ...)to test that error; the call runs in the test, so the file loads and its tests run. -
#80
cae53c1- Before Vitest 4.1, aretryobject in the config, astest: { retry: { count: 2 } }, now gets a
config-value-unknownwarning that Vitest runs no test with it. The tests already hadretries: null, but nothing
said why. -
#80
cae53c1- A call through a Vitest member that reads the function it is called on, destructured as in
const { each } = test; each([1, 2])('sizes lot %i', fn), is now aninvalid-chainerror, and the file's tests are
notLoaded: Vitest fails the file. That holds foreach,for,skipIfandrunIfoftestandeachof
describein every version,extend,scopedandoverridefrom Vitest 4.1, andforofdescribefrom Vitest 5.
Before, the scan said nothing and listed the file's other tests as active. -
#80
cae53c1- An inline Vitest project intest.projectsnow runs from the config'stest.rootorrootwhen it sets none of its
own, as every Vitest version does; the scan used the config's folder before Vitest 5. A root the project sets is
resolved from the config's root in Vitest 5, as Vitest 5 does, and from the config's folder before. -
#85
90df9aa- WithexpandCases, a Vitest case title cuts long values at the length the config sets,test.taskTitleValueFormatTruncate
from Vitest 5 andtest.chaiConfig.truncateThresholdbefore, as Vitest does; it cut them at Vitest's default, 40, always. -
#80
cae53c1- From Vitest 5,timeout: undefined,retry: undefinedandrepeats: undefinedin a test's options are left out, as
Vitest leaves them out, instead of giving anunresolved-optionwarning thatundefinedis not a whole number.