Security News
The Unpaid Backbone of Open Source: Solo Maintainers Face Increasing Security Demands
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
jest-validate
Advanced tools
Generic configuration validation tool that helps you with warnings, errors and deprecation messages as well as showing users examples of correct configuration.
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.
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" }}
Convict is a configuration management library for Node.js that includes schema validation. It is similar to jest-validate in that it validates configuration objects, but it is more general-purpose and not tied to a specific framework like Jest.
Joi is a powerful schema description language and data validator for JavaScript. Unlike jest-validate, which is tailored for Jest configurations, Joi can be used for validating any kind of data structures and is often used for validating API input.
Yup is a JavaScript schema builder for value parsing and validation. Similar to Joi, it defines a schema to validate objects against. It is less verbose and more expressive in some cases compared to Joi and is not specific to Jest configurations.
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
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.
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.
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
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:
string
, number
, array
, boolean
, function
, or object
null
or undefined
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.
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:
● 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
● Validation Error:
Option transform must be of type:
object
but instead received:
string
Example:
{
"transform": {
"\\.js$": "<rootDir>/preprocessor.js"
}
}
Documentation: http://custom-docs.com
import {multipleValidOptions} from 'jest-validate';
validate(config, {
// `bar` will accept either a string or a number
bar: multipleValidOptions('string is ok', 2),
});
● 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
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
28.0.0
[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)[*]
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)[*]
[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)[jest-haste-map]
[BREAKING] Default to node
crawler over shelling out to find
if watchman
is not enabled (#12320)FAQs
Generic configuration validation tool that helps you with warnings, errors and deprecation messages as well as showing users examples of correct configuration.
The npm package jest-validate receives a total of 20,942,798 weekly downloads. As such, jest-validate popularity was classified as popular.
We found that jest-validate demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
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.
Security News
Solo open source maintainers face burnout and security challenges, with 60% unpaid and 60% considering quitting.
Security News
License exceptions modify the terms of open source licenses, impacting how software can be used, modified, and distributed. Developers should be aware of the legal implications of these exceptions.
Security News
A developer is accusing Tencent of violating the GPL by modifying a Python utility and changing its license to BSD, highlighting the importance of copyleft compliance.