Socket
Socket
Sign inDemoInstall

vitest

Package Overview
Dependencies
14
Maintainers
1
Versions
357
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.11 to 0.0.12

2

dist/cli.js

@@ -25,5 +25,5 @@ var _a;

const testOptions = viteConfig.test || {};
await run(Object.assign(Object.assign({}, testOptions), { updateSnapshot: argv.update, rootDir: argv.root || process.cwd() }));
await run(Object.assign(Object.assign({}, testOptions), { server, updateSnapshot: argv.update, rootDir: argv.root || process.cwd(), nameFilters: argv._ }));
function help() {
log('Help: finish help');
}

@@ -8,2 +8,2 @@ import sinon from 'sinon';

export { sinon };
export declare const mock: sinon.SinonMockStatic, spy: sinon.SinonSpyStatic;
export declare const mock: sinon.SinonMockStatic, spy: sinon.SinonSpyStatic, stub: sinon.SinonStubStatic;

@@ -8,2 +8,2 @@ import sinon from 'sinon';

export { sinon };
export const { mock, spy } = sinon;
export const { mock, spy, stub } = sinon;

@@ -51,9 +51,9 @@ import { relative } from 'path';

(_a = task.__ora) === null || _a === void 0 ? void 0 : _a.stop();
if (task.status === 'pass') {
if (task.state === 'pass') {
this.log(`${c.green(CHECK + task.name)}`);
}
else if (task.status === 'skip') {
else if (task.state === 'skip') {
this.log(c.dim(c.yellow(`${DOT + task.name} (skipped)`)));
}
else if (task.status === 'todo') {
else if (task.state === 'todo') {
this.log(c.dim(`${DOT + task.name} (todo)`));

@@ -71,6 +71,7 @@ }

const tasks = files.reduce((acc, file) => acc.concat(file.suites.flatMap(i => i.tasks)), []);
const passed = tasks.filter(i => i.status === 'pass');
const failed = tasks.filter(i => i.status === 'fail');
const skipped = tasks.filter(i => i.status === 'skip');
const todo = tasks.filter(i => i.status === 'todo');
const runable = tasks.filter(i => i.state === 'pass' || i.state === 'fail');
const passed = tasks.filter(i => i.state === 'pass');
const failed = tasks.filter(i => i.state === 'fail');
const skipped = tasks.filter(i => i.state === 'skip');
const todo = tasks.filter(i => i.state === 'todo');
this.indent = 0;

@@ -94,5 +95,5 @@ if (failedFiles.length) {

}
this.log(c.green(`Passed ${passed.length} / ${tasks.length}`));
this.log(c.green(`Passed ${passed.length} / ${runable.length}`));
if (failed.length)
this.log(c.red(`Failed ${failed.length} / ${tasks.length}`));
this.log(c.red(`Failed ${failed.length} / ${runable.length}`));
if (skipped.length)

@@ -99,0 +100,0 @@ this.log(c.yellow(`Skipped ${skipped.length}`));

@@ -1,5 +0,5 @@

import { File, Options, Task, RunnerContext } from './types';
import { File, Config, Task, RunnerContext } from './types';
export declare function runTask(task: Task, ctx: RunnerContext): Promise<void>;
export declare function collectFiles(files: string[]): Promise<File[]>;
export declare function collectFiles(paths: string[]): Promise<File[]>;
export declare function runFile(file: File, ctx: RunnerContext): Promise<void>;
export declare function run(options?: Options): Promise<void>;
export declare function run(config: Config): Promise<void>;

@@ -14,25 +14,19 @@ import chai from 'chai';

await ((_a = reporter.onTaskBegin) === null || _a === void 0 ? void 0 : _a.call(reporter, task, ctx));
await beforeEachHook.fire(task);
if (task.suite.mode === 'skip' || task.mode === 'skip') {
task.status = 'skip';
}
else if (task.suite.mode === 'todo' || task.mode === 'todo') {
task.status = 'todo';
}
else {
if (task.mode === 'run') {
await beforeEachHook.fire(task);
try {
await task.fn();
task.status = 'pass';
task.state = 'pass';
}
catch (e) {
task.status = 'fail';
task.state = 'fail';
task.error = e;
}
await afterEachHook.fire(task);
}
await afterEachHook.fire(task);
await ((_b = reporter.onTaskEnd) === null || _b === void 0 ? void 0 : _b.call(reporter, task, ctx));
}
export async function collectFiles(files) {
const result = [];
for (const filepath of files) {
export async function collectFiles(paths) {
const files = [];
for (const filepath of paths) {
const file = {

@@ -58,9 +52,33 @@ filepath,

}
result.push(file);
files.push(file);
}
return result;
const allSuites = files.reduce((suites, file) => suites.concat(file.suites), []);
interpretOnlyMode(allSuites);
allSuites.forEach((i) => {
if (i.mode === 'skip')
i.tasks.forEach(t => t.mode === 'run' && (t.state = 'skip'));
else
interpretOnlyMode(i.tasks);
});
return files;
}
/**
* If any items been marked as `only`, mark all other items as `skip`.
*/
function interpretOnlyMode(items) {
if (items.some(i => i.mode === 'only')) {
items.forEach((i) => {
if (i.mode === 'run')
i.mode = 'skip';
else if (i.mode === 'only')
i.mode = 'run';
});
}
}
export async function runFile(file, ctx) {
var _a, _b, _c, _d;
const { reporter } = ctx;
const runableSuites = file.suites.filter(i => i.mode === 'run');
if (runableSuites.length === 0)
return;
await ((_a = reporter.onFileBegin) === null || _a === void 0 ? void 0 : _a.call(reporter, file, ctx));

@@ -79,17 +97,19 @@ await beforeFileHook.fire(file);

}
export async function run(options = {}) {
var _a, _b, _c;
const { rootDir = process.cwd() } = options;
export async function run(config) {
var _a, _b, _c, _d;
const { rootDir = process.cwd() } = config;
// setup chai
chai.use(await SnapshotPlugin({
rootDir,
update: options.updateSnapshot,
update: config.updateSnapshot,
}));
chai.use(SinonChai);
// collect files
const paths = await fg(options.includes || defaultIncludes, {
let paths = await fg(config.includes || defaultIncludes, {
absolute: true,
cwd: options.rootDir,
ignore: options.excludes || defaultExcludes,
cwd: config.rootDir,
ignore: config.excludes || defaultExcludes,
});
if ((_a = config.nameFilters) === null || _a === void 0 ? void 0 : _a.length)
paths = paths.filter(i => config.nameFilters.some(f => i.includes(f)));
if (!paths.length) {

@@ -101,11 +121,10 @@ console.error('No test files found');

const reporter = new DefaultReporter();
await ((_a = reporter.onStart) === null || _a === void 0 ? void 0 : _a.call(reporter, options));
await ((_b = reporter.onStart) === null || _b === void 0 ? void 0 : _b.call(reporter, config));
const files = await collectFiles(paths);
const ctx = {
files,
mode: isOnlyMode(files) ? 'only' : 'all',
userOptions: options,
config,
reporter,
};
await ((_b = reporter.onCollected) === null || _b === void 0 ? void 0 : _b.call(reporter, ctx));
await ((_c = reporter.onCollected) === null || _c === void 0 ? void 0 : _c.call(reporter, ctx));
await beforeAllHook.fire();

@@ -115,6 +134,3 @@ for (const file of files)

await afterAllHook.fire();
await ((_c = reporter.onFinished) === null || _c === void 0 ? void 0 : _c.call(reporter, ctx));
await ((_d = reporter.onFinished) === null || _d === void 0 ? void 0 : _d.call(reporter, ctx));
}
function isOnlyMode(files) {
return !!files.find(file => file.suites.find(suite => suite.mode === 'only' || suite.tasks.find(t => t.mode === 'only')));
}

@@ -25,3 +25,3 @@ import { context } from './context';

suite: {},
status: 'init',
state: mode !== 'run' ? mode : undefined,
fn,

@@ -28,0 +28,0 @@ });

@@ -0,1 +1,2 @@

import { ViteDevServer } from 'vite';
export declare type Awaitable<T> = Promise<T> | T;

@@ -6,8 +7,11 @@ export interface UserOptions {

}
export interface Options extends UserOptions {
export interface Config extends UserOptions {
rootDir?: string;
updateSnapshot?: boolean;
nameFilters?: string[];
server: ViteDevServer;
watch?: boolean;
}
export declare type RunMode = 'run' | 'skip' | 'only' | 'todo';
export declare type TaskStatus = 'init' | 'pass' | 'fail' | 'skip' | 'todo';
export declare type TaskState = RunMode | 'pass' | 'fail';
export interface Task {

@@ -19,3 +23,3 @@ name: string;

file?: File;
status: TaskStatus;
state?: TaskState;
error?: unknown;

@@ -52,4 +56,3 @@ }

files: File[];
mode: 'all' | 'only';
userOptions: Options;
config: Config;
reporter: Reporter;

@@ -62,3 +65,3 @@ }

export interface Reporter {
onStart: (userOptions: Options) => Awaitable<void>;
onStart: (userOptions: Config) => Awaitable<void>;
onCollected: (ctx: RunnerContext) => Awaitable<void>;

@@ -65,0 +68,0 @@ onFinished: (ctx: RunnerContext) => Awaitable<void>;

@@ -1,2 +0,1 @@

/* eslint-disable no-use-before-define */
export {};
{
"name": "vitest",
"version": "0.0.11",
"version": "0.0.12",
"type": "module",

@@ -35,11 +35,2 @@ "description": "",

},
"scripts": {
"build": "tsc",
"watch": "tsc --watch",
"lint": "eslint \"{src,test}/**/*.ts\"",
"prepublishOnly": "nr build",
"release": "bumpp --commit --push --tag && pnpm publish",
"test": "node bin/vitest.mjs --dev",
"test:update": "nr test -u"
},
"devDependencies": {

@@ -72,3 +63,11 @@ "@antfu/eslint-config": "^0.11.1",

"vite-node": "^0.1.10"
},
"scripts": {
"build": "tsc",
"watch": "tsc --watch",
"lint": "eslint \"{src,test}/**/*.ts\"",
"release": "bumpp --commit --push --tag && pnpm publish",
"test": "node bin/vitest.mjs --dev",
"test:update": "nr test -u"
}
}
}

@@ -40,2 +40,23 @@ # vitest

## Configuration
`vitest` will read your root `vite.config.ts` when it present to match with the plugins and setup as your Vite app. If you want to it to have a different configuration for testing, you could either:
- Create `vitest.config.ts`, which will have the higher priority
- Pass `--config` option to CLI, e.g. `vitest --config ./path/to/vitest.config.ts`
- Use `process.env.VITEST` to conditionally apply differnet configuration in `vite.config.ts`
To configure `vitest` itself, add `test` property in your Vite config
```ts
// vite.config.ts
import { defineConfig } from 'vite'
export default defineConfig({
test: {
// ...
}
})
```
## Filtering

@@ -107,2 +128,3 @@

- [x] Mock
- [ ] Global Mode & Types
- [ ] Parallel Executing

@@ -112,2 +134,3 @@ - [ ] CLI Help

- [ ] Watch
- [ ] Source Map
- [ ] Coverage

@@ -114,0 +137,0 @@

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc