Socket
Socket
Sign inDemoInstall

jest-validate

Package Overview
Dependencies
21
Maintainers
6
Versions
216
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
Maintainers
6
Install size
2.32 MB
Created

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

29.0.0

Features

  • [expect] [BREAKING] Differentiate between MatcherContext MatcherUtils and MatcherState types (#13141)
  • [jest-circus] Add support for test.failing.each (#13142)
  • [jest-config] [BREAKING] Make snapshotFormat default to escapeString: false and printBasicPrototype: false (#13036)
  • [jest-config] [BREAKING] Remove undocumented collectCoverageOnlyFrom option (#13156)
  • [jest-environment-jsdom] [BREAKING] Upgrade to jsdom@20 (#13037, #13058)
  • [@jest/globals] Add jest.Mocked, jest.MockedClass, jest.MockedFunction and jest.MockedObject utility types (#12727)
  • [jest-mock] [BREAKING] Refactor Mocked* utility types. MaybeMockedDeep and MaybeMocked became Mocked and MockedShallow respectively; only deep mocked variants of MockedClass, MockedFunction and MockedObject are exported (#13123, #13124)
  • [jest-mock] [BREAKING] Change the default jest.mocked helper’s behavior to deep mocked (#13125)
  • [jest-snapshot] [BREAKING] Let babel find config when updating inline snapshots (#13150)
  • [@jest/test-result, @jest/types] [BREAKING] Replace Bytes and Milliseconds types with number (#13155)
  • [jest-worker] Adds workerIdleMemoryLimit option which is used as a check for worker memory leaks >= Node 16.11.0 and recycles child workers as required (#13056, #13105, #13106, #13107)
  • [pretty-format] [BREAKING] Remove ConvertAnsi plugin in favour of jest-serializer-ansi-escapes (#13040)
  • [pretty-format] Allow to opt out from sorting object keys with compareKeys: null (#12443)

Fixes

  • [jest-config] Fix testing multiple projects with TypeScript config files (#13099)
  • [@jest/expect-utils] Fix deep equality of ImmutableJS Record (#13055)
  • [jest-haste-map] Increase the maximum possible file size that jest-haste-map can handle (#13094)
  • [jest-runtime] Properly support CJS re-exports from dual packages (#13170)
  • [jest-snapshot] Make prettierPath optional in SnapshotState (#13149)
  • [jest-snapshot] Fix parsing error from inline snapshot files with JSX (#12760)
  • [jest-worker] When a process runs out of memory worker exits correctly and doesn't spin indefinitely (#13054)

Chore & Maintenance

  • [*] [BREAKING] Drop support for Node v12 and v17 (#13033)
  • [docs] Fix webpack name (#13049)
  • [docs] Explicit how to set n for --bail (#13128)
  • [docs] Update Enzyme URL (#13166)
  • [jest-leak-detector] Remove support for weak-napi (#13035)
  • [jest-snapshot] [BREAKING] Require rootDir as argument to SnapshotState (#13150)

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 Aug 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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc