Socket
Socket
Sign inDemoInstall

jest-validate

Package Overview
Dependencies
22
Maintainers
6
Versions
218
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    jest-validate

Generic configuration validation tool that helps you with warnings, errors and deprecation messages as well as showing users examples of correct configuration.


Version published
Weekly downloads
25M
decreased by-0.22%
Maintainers
6
Created
Weekly downloads
 

Package description

What is jest-validate?

The jest-validate package is a utility for validating and ensuring that configurations passed to Jest, the JavaScript testing framework, are correct. It checks if the provided configuration object adheres to Jest's expected configurations and provides warnings or errors for any invalid or unknown options. This helps developers to quickly identify issues with their Jest setup.

What are jest-validate's main functionalities?

Validation of configuration objects

This feature allows developers to validate their Jest configuration objects against a schema. It ensures that the configuration provided matches the expected format and values that Jest can work with.

{"validateConfig": require('jest-validate').validateConfig, "config": { "verbose": true }, "exampleConfig": { "verbose": false }}

Customization of validation messages

Developers can provide custom messages for unknown or deprecated options. This helps in guiding the user to correct their configuration with helpful feedback.

{"validateConfig": require('jest-validate').validateConfig, "config": { "unknownOption": true }, "exampleConfig": { "verbose": false }, "options": { "comment": "A custom message for unknownOption" }}

Deprecation warnings

jest-validate can warn users about deprecated configuration options. It provides a mechanism to inform users about the new options they should use instead.

{"validateConfig": require('jest-validate').validateConfig, "config": { "scriptPreprocessor": "<rootDir>/preprocessor.js" }, "exampleConfig": { "transform": {"^.+\\.js$": "<rootDir>/preprocessor.js"} }, "deprecatedConfig": { "scriptPreprocessor": "Please use `transform` instead" }}

Other packages similar to jest-validate

Changelog

Source

28.0.0

Features

  • [babel-jest] Export createTransformer function (#12399)
  • [expect] Expose AsymmetricMatchers, MatcherFunction and MatcherFunctionWithState interfaces (#12363, #12376)
  • [jest-circus] Support error logging before retry (#12201)
  • [jest-circus, jest-jasmine2] Allowed classes and functions as describe and it/test names (#12484)
  • [jest-cli, jest-config] [BREAKING] Remove testURL config, use testEnvironmentOptions.url instead (#10797)
  • [jest-cli, jest-core] Add --shard parameter for distributed parallel test execution (#12546)
  • [jest-cli] [BREAKING] Remove undocumented --timers option (#12572)
  • [jest-config] [BREAKING] Stop shipping jest-environment-jsdom by default (#12354)
  • [jest-config] [BREAKING] Stop shipping jest-jasmine2 by default (#12355)
  • [jest-config, @jest/types] Add ci to GlobalConfig (#12378)
  • [jest-config] [BREAKING] Rename moduleLoader to runtime (#10817)
  • [jest-config] [BREAKING] Rename extraGlobals to sandboxInjectedGlobals (#10817)
  • [jest-config] [BREAKING] Throw an error instead of showing a warning if multiple configs are used (#12510)
  • [jest-config] [BREAKING] Do not normalize long deprecated configuration options preprocessorIgnorePatterns, scriptPreprocessor, setupTestFrameworkScriptFile and testPathDirs (#12701)
  • [jest-cli, jest-core] Add --ignoreProjects CLI argument to ignore test suites by project name (#12620)
  • [jest-core] Pass project config to globalSetup/globalTeardown function as second argument (#12440)
  • [jest-core] Stabilize test runners with event emitters (#12641)
  • [jest-core, jest-watcher] [BREAKING] Move TestWatcher class to jest-watcher package (#12652)
  • [jest-core] Allow using Summary Reporter as stand-alone reporter (#12687)
  • [jest-environment-jsdom] [BREAKING] Upgrade jsdom to 19.0.0 (#12290)
  • [jest-environment-jsdom] [BREAKING] Add default browser condition to exportConditions for jsdom environment (#11924)
  • [jest-environment-jsdom] [BREAKING] Pass global config to Jest environment constructor for jsdom environment (#12461)
  • [jest-environment-jsdom] [BREAKING] Second argument context to constructor is mandatory (#12469)
  • [jest-environment-node] [BREAKING] Add default node and node-addon conditions to exportConditions for node environment (#11924)
  • [jest-environment-node] [BREAKING] Pass global config to Jest environment constructor for node environment (#12461)
  • [jest-environment-node] [BREAKING] Second argument context to constructor is mandatory (#12469)
  • [jest-environment-node] Add all available globals to test globals, not just explicit ones (#12642, #12696)
  • [@jest/expect] New module which extends expect with jest-snapshot matchers (#12404, #12410, #12418)
  • [@jest/expect-utils] New module exporting utils for expect (#12323)
  • [@jest/fake-timers] [BREAKING] Rename timers configuration option to fakeTimers (#12572)
  • [@jest/fake-timers] [BREAKING] Allow jest.useFakeTimers() and projectConfig.fakeTimers to take an options bag (#12572)
  • [jest-haste-map] [BREAKING] HasteMap.create now returns a promise (#12008)
  • [jest-haste-map] Add support for dependencyExtractor written in ESM (#12008)
  • [jest-mock] [BREAKING] Rename exported utility types ClassLike, FunctionLike, ConstructorLikeKeys, MethodLikeKeys, PropertyLikeKeys; remove exports of utility types ArgumentsOf, ArgsType, ConstructorArgumentsOf - TS builtin utility types ConstructorParameters and Parameters should be used instead (#12435, #12489)
  • [jest-mock] Improve isMockFunction to infer types of passed function (#12442)
  • [jest-mock] [BREAKING] Improve the usage of jest.fn generic type argument (#12489)
  • [jest-mock] Add support for auto-mocking async generator functions (#11080)
  • [jest-mock] Add contexts member to mock functions (#12601)
  • [@jest/reporters] Add GitHub Actions reporter (#11320, #12658)
  • [@jest/reporters] Pass reporterContext to custom reporter constructors as third argument (#12657)
  • [jest-resolve] [BREAKING] Add support for package.json exports (#11961, #12373)
  • [jest-resolve] Support package self-reference (#12682)
  • [jest-resolve, jest-runtime] Add support for data: URI import and mock (#12392)
  • [jest-resolve, jest-runtime] Add support for async resolver (#11540)
  • [jest-resolve] [BREAKING] Remove browser?: boolean from resolver options, conditions: ['browser'] should be used instead (#12707)
  • [jest-resolve] Expose JestResolver, AsyncResolver, SyncResolver, PackageFilter, PathFilter and PackageJSON types (#12707, (#12712)
  • [jest-runner] Allow setupFiles module to export an async function (#12042)
  • [jest-runner] Allow passing testEnvironmentOptions via docblocks (#12470)
  • [jest-runner] Expose CallbackTestRunner, EmittingTestRunner abstract classes and CallbackTestRunnerInterface, EmittingTestRunnerInterface to help typing third party runners (#12646, #12715)
  • [jest-runner] Lock version of source-map-support to 0.5.13 (#12720)
  • [jest-runtime] [BREAKING] Runtime.createHasteMap now returns a promise (#12008)
  • [jest-runtime] Calling jest.resetModules function will clear FS and transform cache (#12531)
  • [jest-runtime] [BREAKING] Remove Context type export, it must be imported from @jest/test-result (#12685)
  • [jest-runtime] Add import.meta.jest (#12698)
  • [@jest/schemas] New module for JSON schemas for Jest's config (#12384)
  • [@jest/source-map] Migrate from source-map to @jridgewell/trace-mapping (#12692)
  • [jest-transform] [BREAKING] Make it required for process() and processAsync() methods to always return structured data (#12638)
  • [jest-test-result] Add duration property to JSON test output (#12518)
  • [jest-watcher] [BREAKING] Make PatternPrompt class to take entityName as third constructor parameter instead of this._entityName (#12591)
  • [jest-worker] [BREAKING] Allow only absolute workerPath (#12343)
  • [jest-worker] [BREAKING] Default to advanced serialization when using child process workers (#10983)
  • [pretty-format] New maxWidth parameter (#12402)

Fixes

  • [*] Use sha256 instead of md5 as hashing algorithm for compatibility with FIPS systems (#12722)
  • [babel-jest] [BREAKING] Pass rootDir as root in Babel's options (#12689)
  • [expect] Move typings of .not, .rejects and .resolves modifiers outside of Matchers interface (#12346)
  • [expect] Throw useful error if expect.extend is called with invalid matchers (#12488)
  • [expect] Fix iterableEquality ignores other properties (#8359)
  • [expect] Fix print for the closeTo matcher (#12626)
  • [jest-changed-files] Improve changedFilesWithAncestor pattern for Mercurial SCM (#12322)
  • [jest-circus, @jest/types] Disallow undefined value in TestContext type (#12507)
  • [jest-config] Correctly detect CI environment and update snapshots accordingly (#12378)
  • [jest-config] Pass moduleTypes to ts-node to enforce CJS when transpiling (#12397)
  • [jest-config] [BREAKING] Add mjs and cjs to default moduleFileExtensions config (#12578)
  • [jest-config, jest-haste-map] Allow searching for tests in node_modules by exposing retainAllFiles (#11084)
  • [jest-core] [BREAKING] Exit with status 1 if no tests are found with --findRelatedTests flag (#12487)
  • [jest-core] Do not report unref-ed subprocesses as open handles (#12705)
  • [jest-each] %# is not replaced with index of the test case (#12517)
  • [jest-each] Fixes error message with incorrect count of missing arguments (#12464)
  • [jest-environment-jsdom] Make jsdom accessible to extending environments again (#12232)
  • [jest-environment-jsdom] Log JSDOM errors more cleanly (#12386)
  • [jest-environment-node] Add MessageChannel, MessageEvent to globals (#12553)
  • [jest-environment-node] Add structuredClone to globals (#12631)
  • [@jest/expect-utils] [BREAKING] Fix false positives when looking for undefined prop (#8923)
  • [jest-haste-map] Don't use partial results if file crawl errors (#12420)
  • [jest-haste-map] Make watchman existence check lazy+async (#12675)
  • [jest-jasmine2, jest-types] [BREAKING] Move all jasmine specific types from @jest/types to its own package (#12125)
  • [jest-jasmine2] Do not set duration to 0 for skipped tests (#12518)
  • [jest-matcher-utils] Pass maxWidth to pretty-format to avoid printing every element in arrays by default (#12402)
  • [jest-mock] Fix function overloads for spyOn to allow more correct type inference in complex object (#12442)
  • [jest-mock] Handle overridden Function.name property (#12674)
  • [@jest/reporters] Notifications generated by the --notify flag are no longer persistent in GNOME Shell. (#11733)
  • [@jest/reporters] Move missing icon file which is needed for NotifyReporter class. (#12593)
  • [@jest/reporters] Update v8-to-istanbul (#12697)
  • [jest-resolver] Call custom resolver with core node.js modules (#12654)
  • [jest-runner] Correctly resolve source-map-support (#12706)
  • [jest-worker] Fix Farm execution results memory leak (#12497)

Chore & Maintenance

  • [*] [BREAKING] Drop support for Node v10 and v15 and target first LTS 16.13.0 (#12220)
  • [*] [BREAKING] Drop support for typescript@3.8, minimum version is now 4.3 (#11142, #12648)
  • [*] Bundle all .d.ts files into a single index.d.ts per module (#12345)
  • [*] Use globalThis instead of global (#12447)
  • [babel-jest] [BREAKING] Only export createTransformer (#12407)
  • [docs] Add note about not mixing done() with Promises (#11077)
  • [docs, examples] Update React examples to match with the new React guidelines for code examples (#12217)
  • [docs] Add clarity for module factory hoisting limitations (#12453)
  • [docs] Add more information about how code transformers work (#12407)
  • [docs] Add upgrading guide (#12633)
  • [expect] [BREAKING] Remove support for importing build/utils (#12323)
  • [expect] [BREAKING] Migrate to ESM (#12344)
  • [expect] [BREAKING] Snapshot matcher types are moved to @jest/expect (#12404)
  • [jest-cli] Update yargs to v17 (#12357)
  • [jest-config] [BREAKING] Remove getTestEnvironment export (#12353)
  • [jest-config] [BREAKING] Rename config option name to id (#11981)
  • [jest-create-cache-key-function] Added README.md file with basic usage instructions (#12492)
  • [@jest/core] Use index.ts instead of jest.ts as main export (#12329)
  • [jest-environment-jsdom] [BREAKING] Migrate to ESM (#12340)
  • [jest-environment-node] [BREAKING] Migrate to ESM (#12340)
  • [jest-haste-map] Remove legacy isRegExpSupported (#12676)
  • [@jest/fake-timers] Update @sinonjs/fake_timers to v9 (#12357)
  • [jest-jasmine2, jest-runtime] [BREAKING] Use Symbol to pass jest.setTimeout value instead of jasmine specific logic (#12124)
  • [jest-phabricator] [BREAKING] Migrate to ESM (#12341)
  • [jest-resolve] [BREAKING] Make requireResolveFunction argument mandatory (#12353)
  • [jest-runner] [BREAKING] Remove some type exports from @jest/test-result (#12353)
  • [jest-runner] [BREAKING] Second argument to constructor (Context) is not optional (#12640)
  • [jest-serializer] [BREAKING] Deprecate package in favour of using v8 APIs directly (#12391)
  • [jest-snapshot] [BREAKING] Migrate to ESM (#12342)
  • [jest-transform] Update write-file-atomic to v4 (#12357)
  • [jest-types] [BREAKING] Remove Config.Glob and Config.Path (#12406)
  • [jest] Use index.ts instead of jest.ts as main export (#12329)

Performance

  • [jest-haste-map] [BREAKING] Default to node crawler over shelling out to find if watchman is not enabled (#12320)

Readme

Source

jest-validate

Generic configuration validation tool that helps you with warnings, errors and deprecation messages as well as showing users examples of correct configuration.

npm install --save jest-validate

Usage

import {validate} from 'jest-validate';

validate(config, validationOptions); // => {hasDeprecationWarnings: boolean, isValid: boolean}

Where ValidationOptions are:

type ValidationOptions = {
  comment?: string;
  condition?: (option: unknown, validOption: unknown) => boolean;
  deprecate?: (
    config: Record<string, unknown>,
    option: string,
    deprecatedOptions: DeprecatedOptions,
    options: ValidationOptions,
  ) => boolean;
  deprecatedConfig?: DeprecatedOptions;
  error?: (
    option: string,
    received: unknown,
    defaultValue: unknown,
    options: ValidationOptions,
    path?: Array<string>,
  ) => void;
  exampleConfig: Record<string, unknown>;
  recursive?: boolean;
  recursiveBlacklist?: Array<string>;
  recursiveDenylist?: Array<string>;
  title?: Title;
  unknown?: (
    config: Record<string, unknown>,
    exampleConfig: Record<string, unknown>,
    option: string,
    options: ValidationOptions,
    path?: Array<string>,
  ) => void;
};

type Title = {
  deprecation?: string;
  error?: string;
  warning?: string;
};

exampleConfig is the only option required.

API

By default jest-validate will print generic warning and error messages. You can however customize this behavior by providing options: ValidationOptions object as a second argument:

Almost anything can be overwritten to suite your needs.

Options

  • recursiveDenylist – optional array of string keyPaths that should be excluded from deep (recursive) validation.
  • comment – optional string to be rendered below error/warning message.
  • condition – an optional function with validation condition.
  • deprecate, error, unknown – optional functions responsible for displaying warning and error messages.
  • deprecatedConfig – optional object with deprecated config keys.
  • exampleConfig – the only required option with configuration against which you'd like to test.
  • recursive - optional boolean determining whether recursively compare exampleConfig to config (default: true).
  • title – optional object of titles for errors and messages.

You will find examples of condition, deprecate, error, unknown, and deprecatedConfig inside source of this repository, named respectively.

exampleConfig syntax

exampleConfig should be an object with key/value pairs that contain an example of a valid value for each key. A configuration value is considered valid when:

  • it matches the JavaScript type of the example value, e.g. string, number, array, boolean, function, or object
  • it is null or undefined
  • it matches the Javascript type of any of arguments passed to MultipleValidOptions(...)

The last condition is a special syntax that allows validating where more than one type is permissible; see example below. It's acceptable to have multiple values of the same type in the example, so you can also use this syntax to provide more than one example. When a validation failure occurs, the error message will show all other values in the array as examples.

Examples

Minimal example:

validate(config, {exampleConfig});

Example with slight modifications:

validate(config, {
  comment: '  Documentation: http://custom-docs.com',
  deprecatedConfig,
  exampleConfig,
  title: {
    deprecation: 'Custom Deprecation',
    // leaving 'error' and 'warning' as default
  },
});

This will output:

Warning:
● Validation Warning:

  Unknown option transformx with value "<rootDir>/node_modules/babel-jest" was found.
  This is either a typing error or a user mistake. Fixing it will remove this message.

  Documentation: http://custom-docs.com
Error:
● Validation Error:

  Option transform must be of type:
    object
  but instead received:
    string

  Example:
  {
    "transform": {
      "\\.js$": "<rootDir>/preprocessor.js"
    }
  }

  Documentation: http://custom-docs.com

Example validating multiple types

import {multipleValidOptions} from 'jest-validate';

validate(config, {
  // `bar` will accept either a string or a number
  bar: multipleValidOptions('string is ok', 2),
});
Error:
● Validation Error:

  Option foo must be of type:
    string or number
  but instead received:
    array

  Example:
  {
    "bar": "string is ok"
  }

  or

  {
    "bar": 2
  }

  Documentation: http://custom-docs.com
Deprecation

Based on deprecatedConfig object with proper deprecation messages. Note custom title:

Custom Deprecation:

  Option scriptPreprocessor was replaced by transform, which support multiple preprocessors.

  Jest now treats your current configuration as:
  {
    "transform": {".*": "xxx"}
  }

  Please update your configuration.

  Documentation: http://custom-docs.com

FAQs

Last updated on 25 Apr 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

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