···3636## isOk
37373838- **Type:** `<T>(value: T, message?: string) => asserts value`
3939-- **Alias** `ok`
3939+- **Alias:** `ok`
40404141Assert that the given `value` is truthy.
4242···5252## isNotOk
53535454- **Type:** `<T>(value: T, message?: string) => void`
5555-- **Alias** `notOk`
5555+- **Alias:** `notOk`
56565757Assert that the given `value` is falsy.
5858
+17-17
docs/api/expect.md
···1075107510761076## toHaveBeenCalledTimes
1077107710781078-- **Type**: `(amount: number) => Awaitable<void>`
10781078+- **Type:** `(amount: number) => Awaitable<void>`
1079107910801080This assertion checks if a function was called a certain amount of times. Requires a spy function to be passed to `expect`.
10811081···1100110011011101## toHaveBeenCalledWith
1102110211031103-- **Type**: `(...args: any[]) => Awaitable<void>`
11031103+- **Type:** `(...args: any[]) => Awaitable<void>`
1104110411051105This assertion checks if a function was called at least once with certain parameters. Requires a spy function to be passed to `expect`.
11061106···1126112611271127## toHaveBeenCalledBefore
1128112811291129-- **Type**: `(mock: MockInstance, failIfNoFirstInvocation?: boolean) => Awaitable<void>`
11291129+- **Type:** `(mock: MockInstance, failIfNoFirstInvocation?: boolean) => Awaitable<void>`
1130113011311131This assertion checks if a `Mock` was called before another `Mock`.
11321132···1145114511461146## toHaveBeenCalledAfter
1147114711481148-- **Type**: `(mock: MockInstance, failIfNoFirstInvocation?: boolean) => Awaitable<void>`
11481148+- **Type:** `(mock: MockInstance, failIfNoFirstInvocation?: boolean) => Awaitable<void>`
1149114911501150This assertion checks if a `Mock` was called after another `Mock`.
11511151···1164116411651165## toHaveBeenCalledExactlyOnceWith
1166116611671167-- **Type**: `(...args: any[]) => Awaitable<void>`
11671167+- **Type:** `(...args: any[]) => Awaitable<void>`
1168116811691169This assertion checks if a function was called exactly once and with certain parameters. Requires a spy function to be passed to `expect`.
11701170···1188118811891189## toHaveBeenLastCalledWith
1190119011911191-- **Type**: `(...args: any[]) => Awaitable<void>`
11911191+- **Type:** `(...args: any[]) => Awaitable<void>`
1192119211931193This assertion checks if a function was called with certain parameters at its last invocation. Requires a spy function to be passed to `expect`.
11941194···1214121412151215## toHaveBeenNthCalledWith
1216121612171217-- **Type**: `(time: number, ...args: any[]) => Awaitable<void>`
12171217+- **Type:** `(time: number, ...args: any[]) => Awaitable<void>`
1218121812191219This assertion checks if a function was called with certain parameters at the certain time. The count starts at 1. So, to check the second entry, you would write `.toHaveBeenNthCalledWith(2, ...)`.
12201220···1241124112421242## toHaveReturned
1243124312441244-- **Type**: `() => Awaitable<void>`
12441244+- **Type:** `() => Awaitable<void>`
1245124512461246This assertion checks if a function has successfully returned a value at least once (i.e., did not throw an error). Requires a spy function to be passed to `expect`.
12471247···1265126512661266## toHaveReturnedTimes
1267126712681268-- **Type**: `(amount: number) => Awaitable<void>`
12681268+- **Type:** `(amount: number) => Awaitable<void>`
1269126912701270This assertion checks if a function has successfully returned a value an exact amount of times (i.e., did not throw an error). Requires a spy function to be passed to `expect`.
12711271···1284128412851285## toHaveReturnedWith
1286128612871287-- **Type**: `(returnValue: any) => Awaitable<void>`
12871287+- **Type:** `(returnValue: any) => Awaitable<void>`
1288128812891289You can call this assertion to check if a function has successfully returned a value with certain parameters at least once. Requires a spy function to be passed to `expect`.
12901290···1302130213031303## toHaveLastReturnedWith
1304130413051305-- **Type**: `(returnValue: any) => Awaitable<void>`
13051305+- **Type:** `(returnValue: any) => Awaitable<void>`
1306130613071307You can call this assertion to check if a function has successfully returned a certain value when it was last invoked. Requires a spy function to be passed to `expect`.
13081308···1321132113221322## toHaveNthReturnedWith
1323132313241324-- **Type**: `(time: number, returnValue: any) => Awaitable<void>`
13241324+- **Type:** `(time: number, returnValue: any) => Awaitable<void>`
1325132513261326You can call this assertion to check if a function has successfully returned a value with certain parameters on a certain call. Requires a spy function to be passed to `expect`.
13271327···1342134213431343## toHaveResolved
1344134413451345-- **Type**: `() => Awaitable<void>`
13451345+- **Type:** `() => Awaitable<void>`
1346134613471347This assertion checks if a function has successfully resolved a value at least once (i.e., did not reject). Requires a spy function to be passed to `expect`.
13481348···1368136813691369## toHaveResolvedTimes
1370137013711371-- **Type**: `(amount: number) => Awaitable<void>`
13711371+- **Type:** `(amount: number) => Awaitable<void>`
1372137213731373This assertion checks if a function has successfully resolved a value an exact amount of times (i.e., did not reject). Requires a spy function to be passed to `expect`.
13741374···1389138913901390## toHaveResolvedWith
1391139113921392-- **Type**: `(returnValue: any) => Awaitable<void>`
13921392+- **Type:** `(returnValue: any) => Awaitable<void>`
1393139313941394You can call this assertion to check if a function has successfully resolved a certain value at least once. Requires a spy function to be passed to `expect`.
13951395···1409140914101410## toHaveLastResolvedWith
1411141114121412-- **Type**: `(returnValue: any) => Awaitable<void>`
14121412+- **Type:** `(returnValue: any) => Awaitable<void>`
1413141314141414You can call this assertion to check if a function has successfully resolved a certain value when it was last invoked. Requires a spy function to be passed to `expect`.
14151415···1430143014311431## toHaveNthResolvedWith
1432143214331433-- **Type**: `(time: number, returnValue: any) => Awaitable<void>`
14331433+- **Type:** `(time: number, returnValue: any) => Awaitable<void>`
1434143414351435You can call this assertion to check if a function has successfully resolved a certain value on a specific invocation. Requires a spy function to be passed to `expect`.
14361436
+2-2
docs/config/allowonly.md
···5566# allowOnly
7788-- **Type**: `boolean`
99-- **Default**: `!process.env.CI`
88+- **Type:** `boolean`
99+- **Default:** `!process.env.CI`
1010- **CLI:** `--allowOnly`, `--allowOnly=false`
11111212By default, Vitest does not permit tests marked with the [`only`](/api/test#test-only) flag in Continuous Integration (CI) environments. Conversely, in local development environments, Vitest allows these tests to run.
+1-1
docs/config/bail.md
···7788- **Type:** `number`
99- **Default:** `0`
1010-- **CLI**: `--bail=<value>`
1010+- **CLI:** `--bail=<value>`
11111212Stop test execution when given number of tests have failed.
1313
+2-2
docs/config/cache.md
···5566# cache <CRoot />
7788-- **Type**: `false`
99-- **CLI**: `--no-cache`, `--cache=false`
88+- **Type:** `false`
99+- **CLI:** `--no-cache`, `--cache=false`
10101111Use this option if you want to disable the cache feature. At the moment Vitest stores cache for test results to run the longer and failed tests first.
1212
+1-1
docs/config/coverage.md
···6565- **Available for providers:** `'v8' | 'istanbul'`
6666- **CLI:** `--coverage.clean`, `--coverage.clean=false`
67676868-Clean coverage results before running tests
6868+Clean coverage results before running tests.
69697070## coverage.cleanOnRerun
7171
+9-9
docs/config/css.md
···5566# css
7788-- **Type**: `boolean | { include?, exclude?, modules? }`
88+- **Type:** `boolean | { include?, exclude?, modules? }`
991010Configure if CSS should be processed. When excluded, CSS files will be replaced with empty strings to bypass the subsequent processing. CSS Modules will return a proxy to not affect runtime.
1111···15151616## css.include
17171818-- **Type**: `RegExp | RegExp[]`
1919-- **Default**: `[]`
1818+- **Type:** `RegExp | RegExp[]`
1919+- **Default:** `[]`
20202121RegExp pattern for files that should return actual CSS and will be processed by Vite pipeline.
2222···26262727## css.exclude
28282929-- **Type**: `RegExp | RegExp[]`
3030-- **Default**: `[]`
2929+- **Type:** `RegExp | RegExp[]`
3030+- **Default:** `[]`
31313232RegExp pattern for files that will return an empty CSS file.
33333434## css.modules
35353636-- **Type**: `{ classNameStrategy? }`
3737-- **Default**: `{}`
3636+- **Type:** `{ classNameStrategy? }`
3737+- **Default:** `{}`
38383939### css.modules.classNameStrategy
40404141-- **Type**: `'stable' | 'scoped' | 'non-scoped'`
4242-- **Default**: `'stable'`
4141+- **Type:** `'stable' | 'scoped' | 'non-scoped'`
4242+- **Default:** `'stable'`
43434444If you decide to process CSS files, you can configure if class names inside CSS modules should be scoped. You can choose one of the options:
4545
···111111## deps.moduleDirectories
112112113113- **Type:** `string[]`
114114-- **Default**: `['node_modules']`
114114+- **Default:** `['node_modules']`
115115116116A list of directories that should be treated as module directories. This config option affects the behavior of [`vi.mock`](/api/vi#vi-mock): when no factory is provided and the path of what you are mocking matches one of the `moduleDirectories` values, Vitest will try to resolve the mock by looking for a `__mocks__` folder in the [root](/config/root) of the project.
117117
+14-14
docs/config/diff.md
···56565757## diff.expand
58585959-- **Type**: `boolean`
6060-- **Default**: `true`
5959+- **Type:** `boolean`
6060+- **Default:** `true`
6161- **CLI:** `--diff.expand=false`
62626363Expand all common lines.
64646565## diff.truncateThreshold
66666767-- **Type**: `number`
6868-- **Default**: `0`
6767+- **Type:** `number`
6868+- **Default:** `0`
6969- **CLI:** `--diff.truncateThreshold=<path>`
70707171The maximum length of diff result to be displayed. Diffs above this threshold will be truncated.
···73737474## diff.truncateAnnotation
75757676-- **Type**: `string`
7777-- **Default**: `'... Diff result is truncated'`
7676+- **Type:** `string`
7777+- **Default:** `'... Diff result is truncated'`
7878- **CLI:** `--diff.truncateAnnotation=<annotation>`
79798080Annotation that is output at the end of diff result if it's truncated.
81818282## diff.truncateAnnotationColor
83838484-- **Type**: `DiffOptionsColor = (arg: string) => string`
8585-- **Default**: `noColor = (string: string): string => string`
8484+- **Type:** `DiffOptionsColor = (arg: string) => string`
8585+- **Default:** `noColor = (string: string): string => string`
86868787Color of truncate annotation, default is output with no color.
88888989## diff.printBasicPrototype
90909191-- **Type**: `boolean`
9292-- **Default**: `false`
9191+- **Type:** `boolean`
9292+- **Default:** `false`
93939494-Print basic prototype `Object` and `Array` in diff output
9494+Print basic prototype `Object` and `Array` in diff output.
95959696## diff.maxDepth
97979898-- **Type**: `number`
9999-- **Default**: `20` (or `8` when comparing different types)
9898+- **Type:** `number`
9999+- **Default:** `20` (or `8` when comparing different types)
100100101101-Limit the depth to recurse when printing nested objects
101101+Limit the depth to recurse when printing nested objects.
+1-1
docs/config/forcereruntriggers.md
···5566# forceRerunTriggers <CRoot />
7788-- **Type**: `string[]`
88+- **Type:** `string[]`
99- **Default:** `['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']`
10101111Glob pattern of file paths that will trigger the whole suite rerun. When paired with the `--changed` argument will run the whole test suite if the trigger is found in the git diff.
+2-2
docs/config/logheapusage.md
···5566# logHeapUsage
7788-- **Type**: `boolean`
99-- **Default**: `false`
88+- **Type:** `boolean`
99+- **Default:** `false`
1010- **CLI:** `--logHeapUsage`, `--logHeapUsage=false`
11111212Show heap usage after each test. Useful for debugging memory leaks.
+3-3
docs/config/maxconcurrency.md
···5566# maxConcurrency
7788-- **Type**: `number`
99-- **Default**: `5`
1010-- **CLI**: `--max-concurrency=10`, `--maxConcurrency=10`
88+- **Type:** `number`
99+- **Default:** `5`
1010+- **CLI:** `--max-concurrency=10`, `--maxConcurrency=10`
11111212The maximum number of tests and hooks that can run at the same time when using `test.concurrent` or `describe.concurrent`.
1313
+1-1
docs/config/mode.md
···99- **CLI:** `--mode=staging`
1010- **Default:** `'test'`
11111212-Overrides Vite mode
1212+Overrides Vite mode.
+1-1
docs/config/onstacktrace.md
···5566# onStackTrace <CRoot />
7788-- **Type**: `(error: Error, frame: ParsedStack) => boolean | void`
88+- **Type:** `(error: Error, frame: ParsedStack) => boolean | void`
991010Apply a filtering function to each frame of each stack trace when handling errors. This does not apply to stack traces printed by [`printConsoleTrace`](/config/printconsoletrace#printconsoletrace). The first argument, `error`, is a `TestError`.
1111
+2-2
docs/config/passwithnotests.md
···5566# passWithNoTests <CRoot />
7788-- **Type**: `boolean`
99-- **Default**: `false`
88+- **Type:** `boolean`
99+- **Default:** `false`
1010- **CLI:** `--passWithNoTests`, `--passWithNoTests=false`
11111212Vitest will not fail, if no tests will be found.
+1-1
docs/config/pool.md
···13131414## threads
15151616-Enable multi-threading. When using threads you are unable to use process related APIs such as `process.chdir()`. Some libraries written in native languages, such as Prisma, `bcrypt` and `canvas`, have problems when running in multiple threads and run into segfaults. In these cases it is advised to use `forks` pool instead.
1616+Enable multi-threading. When using threads you are unable to use process related APIs such as `process.chdir()`. Some libraries written in native languages, such as `Prisma`, `bcrypt` and `canvas`, have problems when running in multiple threads and run into segfaults. In these cases it is advised to use `forks` pool instead.
17171818## forks
1919
+2-2
docs/config/resolvesnapshotpath.md
···5566# resolveSnapshotPath <CRoot />
7788-- **Type**: `(testPath: string, snapExtension: string, context: { config: SerializedConfig }) => string`
99-- **Default**: stores snapshot files in `__snapshots__` directory
88+- **Type:** `(testPath: string, snapExtension: string, context: { config: SerializedConfig }) => string`
99+- **Default:** stores snapshot files in `__snapshots__` directory
10101111Overrides default snapshot path. For example, to store snapshots next to test files:
1212
+2-2
docs/config/runner.md
···5566# runner
7788-- **Type**: `VitestRunnerConstructor`
99-- **Default**: `node`, when running tests, or `benchmark`, when running benchmarks
88+- **Type:** `VitestRunnerConstructor`
99+- **Default:** `node`, when running tests, or `benchmark`, when running benchmarks
10101111Path to a custom test runner. This is an advanced feature and should be used with custom library runners. You can read more about it in [the documentation](/api/advanced/runner).
+24-24
docs/config/sequence.md
···5566# sequence
7788-- **Type**: `{ sequencer?, shuffle?, seed?, hooks?, setupFiles?, groupOrder }`
88+- **Type:** `{ sequencer?, shuffle?, seed?, hooks?, setupFiles?, groupOrder }`
991010Options for how tests should be sorted.
1111···17171818## sequence.sequencer <CRoot />
19192020-- **Type**: `TestSequencerConstructor`
2121-- **Default**: `BaseSequencer`
2020+- **Type:** `TestSequencerConstructor`
2121+- **Default:** `BaseSequencer`
22222323A custom class that defines methods for sharding and sorting. You can extend `BaseSequencer` from `vitest/node`, if you only need to redefine one of the `sort` and `shard` methods, but both should exist.
2424···91919292## sequence.shuffle
93939494-- **Type**: `boolean | { files?, tests? }`
9595-- **Default**: `false`
9696-- **CLI**: `--sequence.shuffle`, `--sequence.shuffle=false`
9494+- **Type:** `boolean | { files?, tests? }`
9595+- **Default:** `false`
9696+- **CLI:** `--sequence.shuffle`, `--sequence.shuffle=false`
97979898If you want files and tests to run randomly, you can enable it with this option, or CLI argument [`--sequence.shuffle`](/guide/cli).
9999···101101102102### sequence.shuffle.files {#sequence-shuffle-files}
103103104104-- **Type**: `boolean`
105105-- **Default**: `false`
106106-- **CLI**: `--sequence.shuffle.files`, `--sequence.shuffle.files=false`
104104+- **Type:** `boolean`
105105+- **Default:** `false`
106106+- **CLI:** `--sequence.shuffle.files`, `--sequence.shuffle.files=false`
107107108108Whether to randomize files, be aware that long running tests will not start earlier if you enable this option.
109109110110### sequence.shuffle.tests {#sequence-shuffle-tests}
111111112112-- **Type**: `boolean`
113113-- **Default**: `false`
114114-- **CLI**: `--sequence.shuffle.tests`, `--sequence.shuffle.tests=false`
112112+- **Type:** `boolean`
113113+- **Default:** `false`
114114+- **CLI:** `--sequence.shuffle.tests`, `--sequence.shuffle.tests=false`
115115116116Whether to randomize tests.
117117118118## sequence.concurrent {#sequence-concurrent}
119119120120-- **Type**: `boolean`
121121-- **Default**: `false`
122122-- **CLI**: `--sequence.concurrent`, `--sequence.concurrent=false`
120120+- **Type:** `boolean`
121121+- **Default:** `false`
122122+- **CLI:** `--sequence.concurrent`, `--sequence.concurrent=false`
123123124124If you want tests to run in parallel, you can enable it with this option, or CLI argument [`--sequence.concurrent`](/guide/cli).
125125···129129130130## sequence.seed <CRoot />
131131132132-- **Type**: `number`
133133-- **Default**: `Date.now()`
134134-- **CLI**: `--sequence.seed=1000`
132132+- **Type:** `number`
133133+- **Default:** `Date.now()`
134134+- **CLI:** `--sequence.seed=1000`
135135136136Sets the randomization seed, if tests are running in random order.
137137138138## sequence.hooks
139139140140-- **Type**: `'stack' | 'list' | 'parallel'`
141141-- **Default**: `'stack'`
142142-- **CLI**: `--sequence.hooks=<value>`
140140+- **Type:** `'stack' | 'list' | 'parallel'`
141141+- **Default:** `'stack'`
142142+- **CLI:** `--sequence.hooks=<value>`
143143144144Changes the order in which hooks are executed.
145145···153153154154## sequence.setupFiles {#sequence-setupfiles}
155155156156-- **Type**: `'list' | 'parallel'`
157157-- **Default**: `'parallel'`
158158-- **CLI**: `--sequence.setupFiles=<value>`
156156+- **Type:** `'list' | 'parallel'`
157157+- **Default:** `'parallel'`
158158+- **CLI:** `--sequence.setupFiles=<value>`
159159160160Changes the order in which setup files are executed.
161161
+3-3
docs/config/slowtestthreshold.md
···5566# slowTestThreshold <CRoot />
7788-- **Type**: `number`
99-- **Default**: `300`
1010-- **CLI**: `--slow-test-threshold=<number>`, `--slowTestThreshold=<number>`
88+- **Type:** `number`
99+- **Default:** `300`
1010+- **CLI:** `--slow-test-threshold=<number>`, `--slowTestThreshold=<number>`
11111212The number of milliseconds after which a test or suite is considered slow and reported as such in the results.
+1-1
docs/config/testnamepattern.md
···5566# testNamePattern <CRoot /> {#testnamepattern}
7788-- **Type** `string | RegExp`
88+- **Type:** `string | RegExp`
99- **CLI:** `-t <pattern>`, `--testNamePattern=<pattern>`, `--test-name-pattern=<pattern>`
10101111Run tests with full names matching the pattern.
+22-22
docs/config/typecheck.md
···991010## typecheck.enabled {#typecheck-enabled}
11111212-- **Type**: `boolean`
1313-- **Default**: `false`
1414-- **CLI**: `--typecheck`, `--typecheck.enabled`
1212+- **Type:** `boolean`
1313+- **Default:** `false`
1414+- **CLI:** `--typecheck`, `--typecheck.enabled`
15151616Enable typechecking alongside your regular tests.
17171818## typecheck.only {#typecheck-only}
19192020-- **Type**: `boolean`
2121-- **Default**: `false`
2222-- **CLI**: `--typecheck.only`
2020+- **Type:** `boolean`
2121+- **Default:** `false`
2222+- **CLI:** `--typecheck.only`
23232424Run only typecheck tests, when typechecking is enabled. When using CLI, this option will automatically enable typechecking.
25252626## typecheck.checker
27272828-- **Type**: `'tsc' | 'vue-tsc' | string`
2929-- **Default**: `tsc`
2828+- **Type:** `'tsc' | 'vue-tsc' | string`
2929+- **Default:** `tsc`
30303131What tools to use for type checking. Vitest will spawn a process with certain parameters for easier parsing, depending on the type. Checker should implement the same output format as `tsc`.
3232···39394040## typecheck.include
41414242-- **Type**: `string[]`
4343-- **Default**: `['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']`
4242+- **Type:** `string[]`
4343+- **Default:** `['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']`
44444545-Glob pattern for files that should be treated as test files
4545+Glob pattern for files that should be treated as test files.
46464747## typecheck.exclude
48484949-- **Type**: `string[]`
5050-- **Default**: `['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']`
4949+- **Type:** `string[]`
5050+- **Default:** `['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']`
51515252-Glob pattern for files that should not be treated as test files
5252+Glob pattern for files that should not be treated as test files.
53535454## typecheck.allowJs
55555656-- **Type**: `boolean`
5757-- **Default**: `false`
5656+- **Type:** `boolean`
5757+- **Default:** `false`
58585959Check JS files that have `@ts-check` comment. If you have it enabled in tsconfig, this will not overwrite it.
60606161## typecheck.ignoreSourceErrors
62626363-- **Type**: `boolean`
6464-- **Default**: `false`
6363+- **Type:** `boolean`
6464+- **Default:** `false`
65656666Do not fail, if Vitest found errors outside the test files. This will not show you non-test errors at all.
6767···69697070## typecheck.tsconfig
71717272-- **Type**: `string`
7373-- **Default**: _tries to find closest tsconfig.json_
7272+- **Type:** `string`
7373+- **Default:** _tries to find closest tsconfig.json_
74747575Path to custom tsconfig, relative to the project root.
76767777## typecheck.spawnTimeout
78787979-- **Type**: `number`
8080-- **Default**: `10_000`
7979+- **Type:** `number`
8080+- **Default:** `10_000`
81818282Minimum time in milliseconds it takes to spawn the typechecker.
+4-4
docs/guide/cli.md
···191191192192### changed
193193194194-- **Type**: `boolean | string`
195195-- **Default**: false
194194+- **Type:** `boolean | string`
195195+- **Default:** false
196196197197Run tests only against changed files. If no value is provided, it will run tests against uncommitted changes (including staged and unstaged).
198198···204204205205### shard
206206207207-- **Type**: `string`
208208-- **Default**: disabled
207207+- **Type:** `string`
208208+- **Default:** disabled
209209210210Test suite shard to execute in a format of `<index>`/`<count>`, where
211211
+1-1
docs/api/advanced/vitest.md
···244244function standalone(): Promise<void>
245245```
246246247247-- **Alias**: `init` <Deprecated />
247247+- **Alias:** `init` <Deprecated />
248248249249Initialize reporters and the coverage provider. This method doesn't run any tests. If the `--watch` flag is provided, Vitest will still run changed tests even if this method was not called.
250250
+1-1
docs/config/browser/provider.md
···6161})
6262```
63636464-## Custom Provider <Badge type="danger">advanced</Badge>
6464+## Custom Provider <Badge type="danger">advanced</Badge> {#custom-provider}
65656666::: danger ADVANCED API
6767The custom provider API is highly experimental and can change between patches. If you just need to run tests in a browser, use the [`browser.instances`](/config/browser/instances) option instead.