diff --git a/package-lock.json b/package-lock.json index 4f39270..e4ea5a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "@athenna/test", - "version": "5.4.0", + "version": "5.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@athenna/test", - "version": "5.4.0", + "version": "5.5.0", "license": "MIT", "dependencies": { "@japa/assert": "^4.1.1", + "@japa/expect-type": "^2.0.3", "@japa/runner": "^3.1.4", "@types/sinon": "^10.0.20", "c8": "^10.1.3", @@ -707,6 +708,21 @@ "node": ">=18.16.0" } }, + "node_modules/@japa/expect-type": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@japa/expect-type/-/expect-type-2.0.3.tgz", + "integrity": "sha512-enwJxA6ovpkUCT1ge/855RMj70yHqP5sxM3sPEPdp9EwaO1zR4EHer9Avo42Cc8DlTUOcM3KyNCxXwRGSVnamQ==", + "license": "MIT", + "dependencies": { + "expect-type": "^1.1.0" + }, + "engines": { + "node": ">=18.16.0" + }, + "peerDependencies": { + "@japa/runner": "^3.1.2 || ^4.0.0" + } + }, "node_modules/@japa/runner": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@japa/runner/-/runner-3.1.4.tgz", @@ -1720,6 +1736,31 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -1767,9 +1808,9 @@ } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -1786,9 +1827,11 @@ } ], "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } }, "node_modules/builtins": { @@ -3944,6 +3987,15 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", diff --git a/package.json b/package.json index a1dccb0..b58d87e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@athenna/test", - "version": "5.4.0", + "version": "5.5.0", "description": "The Athenna test runner. Built on top of Japa.", "license": "MIT", "author": "João Lenon ", @@ -57,6 +57,7 @@ }, "dependencies": { "@japa/assert": "^4.1.1", + "@japa/expect-type": "^2.0.3", "@japa/runner": "^3.1.4", "@types/sinon": "^10.0.20", "c8": "^10.1.3", diff --git a/src/helpers/Runner.ts b/src/helpers/Runner.ts index 25d68c0..936a4c5 100644 --- a/src/helpers/Runner.ts +++ b/src/helpers/Runner.ts @@ -8,7 +8,14 @@ */ import type { Config, PluginFn } from '#src' -import { Importer, run, assert, configure, processCLIArgs } from '#src' +import { + Importer, + run, + assert, + configure, + processCLIArgs, + expectTypeOf +} from '#src' export class Runner { public static files: string[] = [] @@ -80,6 +87,17 @@ export class Runner { return this.addPlugin(assert()) } + /** + * Add the `expectTypeOf()` plugin. + * + * @example ```ts + * Runner.addExpectTypeOfPlugin() + * ``` + */ + public static addExpectTypeOfPlugin(): typeof Runner { + return this.addPlugin(expectTypeOf()) + } + /** * Set the global timeout of all tests. * diff --git a/src/index.ts b/src/index.ts index 4241984..9b8c3d5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,9 +9,19 @@ import { assert, Assert } from '@japa/assert' import { spec } from '@japa/runner/reporters' +import { expectTypeOf } from '@japa/expect-type' import { run, test, configure, processCLIArgs } from '@japa/runner' -export { Assert, run, spec, test, assert, configure, processCLIArgs } +export { + Assert, + run, + spec, + test, + assert, + expectTypeOf, + configure, + processCLIArgs +} export * from '#src/types' diff --git a/src/mocks/MockBuilder.ts b/src/mocks/MockBuilder.ts index 3da7b72..beb40db 100644 --- a/src/mocks/MockBuilder.ts +++ b/src/mocks/MockBuilder.ts @@ -471,7 +471,7 @@ export class MockBuilder { * mock.called // false * ``` */ - public value(value: any) { + public value(value?: any) { this.stub = this.stub.value(value) return this @@ -489,7 +489,7 @@ export class MockBuilder { * mock.called // false * ``` */ - public return(value: any) { + public return(value?: any) { this.stub = this.stub.returns(value) return this @@ -507,7 +507,7 @@ export class MockBuilder { * mock.called // false * ``` */ - public throw(value: string | Error | Exception): MockBuilder { + public throw(value?: string | Error | Exception): MockBuilder { this.stub = this.stub.throws(value) return this @@ -525,7 +525,7 @@ export class MockBuilder { * mock.called // false * ``` */ - public resolve(value: any) { + public resolve(value?: any) { this.stub = this.stub.resolves(value) return this @@ -543,7 +543,7 @@ export class MockBuilder { * mock.called // false * ``` */ - public reject(value: T): MockBuilder { + public reject(value?: T): MockBuilder { this.stub = this.stub.rejects(value) return this