jest-community / jest-extended Goto Github PK
View Code? Open in Web Editor NEWAdditional Jest matchers ๐๐ช
Home Page: https://jest-extended.jestcommunity.dev/
License: MIT License
Additional Jest matchers ๐๐ช
Home Page: https://jest-extended.jestcommunity.dev/
License: MIT License
Feature Request
Description:
.toContainValues([values])
Use .toContainValues when checking if an object contains all of the provided values.
test('passes when object contains all of the given values', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainValues(['foo']);
expect(o).toContainValues(['baz', 'bar']);
expect(o).not.toContainValues(['qux', 'foo']);
});
Feature Request
Description:
toContainValue(value)
Use .toContainValue when checking if an object contains the provided value.
test('passes when object contains given value', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainValue('foo');
expect(o).toContainValue('bar');
expect(o).not.toContainValue('qux');
});
Feature Request
Use .toStartWith
when checking if a String
starts with a given String
prefix.
test('passes when value is starts with given string', () => {
expect('hello world').toStartWith('hello');
expect('hello world').not.toStartWith('world');
});
Feature Request
Use .toContainAnyValues
when checking if an object contains at least one of the provided values.
test('passes when object contains at least one of the given values', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainAnyValues(['qux', 'foo']);
expect(o).toContainAnyValues(['qux', 'bar']);
expect(o).toContainAnyValues(['qux', 'baz']);
expect(o).not.toContainAnyValues(['qux']);
});
Feature Request
Use .toContainAllKeys
when checking if an object only contains all of the provided keys.
test('passes when object only contains all keys', () => {
const o = { a: 'hello', b: 'world' };
expect(o).toContainAllKeys(['a', 'b']);
expect(o).toContainAllKeys(['b', 'a']);
expect(o).not.toContainAllKeys(['b']);
});
Feature Request
Use .toBeString
when checking if a value is a String
.
test('passes when value is a string', () => {
expect('').toBeString();
expect('hello').toBeString();
expect(true).not.toBeString();
});
Feature Request
Use .toContainKey
when checking if an object contains the provided key.
test('passes when object contains the given key', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainKey('a');
expect(o).toContainKey('b');
expect(o).toContainKey('c');
expect(o).not.toContainKey('d');
});
Feature Request
Description:
Add new matcher expect(boolean).toBeFalse()
Possible solution:
const predicate = given => given === false;
Feature Request
Use .toBeFunction
when checking if a value is a Function
.
test('passes when value is a function', () => {
function noop = () {};
expect(() => {}).toBeFunction();
expect(function() {}).not.toBeFunction();
expect(noop).toBeFunction();
expect(true).not.toBeFunction();
});
Feature Request
Use .toContainEntries
when checking if an object contains all of the provided entries.
test('passes when object contains all of the given entries', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainEntries([['a', 'foo']]);
expect(o).toContainEntries([['c', 'baz'], ['a', 'foo']]);
expect(o).not.toContainEntries([['b', 'qux'], ['a', 'foo']]);
});
Feature Request
Use .toEqualIgnoringCase
when checking if a string is equal (===) to another ignoring the casing of both strings.
test('passes when strings are equal ignoring case', () => {
expect('hello world').toEqualIgnoringCase('hello world');
expect('hello WORLD').toEqualIgnoringCase('HELLO world');
expect('HELLO WORLD').toEqualIgnoringCase('hello world');
expect('hello world').toEqualIgnoringCase('HELLO WORLD');
expect('hello world').not.toEqualIgnoringCase('hello');
});
Feature Request
Use .toContainAllValues
when checking if an object only contains all of the provided values.
test('passes when object only contains all of the given values', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainAllValues(['foo', 'bar', 'baz']);
expect(o).toContainAllValues(['baz', 'bar', 'foo']);
expect(o).not.toContainAllValues(['bar', 'foo']);
});
Feature Request
Use .toBeNumber
when checking if a value is a Number
.
test('passes when value is a number', () => {
expect(1).toBeNumber();
expect(NaN).toBeNumber();
expect(Infinity).toBeNumber();
expect(true).not.toBeNumber();
});
(Copied from jestjs/jest#5880)
Do you want to request a feature or report a bug?
A feature
I dumped the template as it doesn't fit feature requests very well. Hope you are okay with that.
Today we have asymmetric matchers like expect.stringMatching
which are awesome for testing dynamic data or only check data that important for the current test. However, there exists no equivalent for numbers.
I propose something like
expect.numberNear(expected, precision)
which would check that the actual value is in the range expected ยฑ precision
.
A common use case for this would be checking a timestamp in a generated object
expect(object).toEqual({type: 'log', timestamp: expect.numberNear(Date.now(), 20)})
Maybe precision
could default to something like Math.log(expected)
so that it could be optional, however this is (maybe a big) risk that that's more confusing than helpful.
Feature Request
Use .toSatisfy
when you want to use a custom matcher by supplying a predicate function that returns a Boolean
.
test('passes when value passes given predicate', () => {
const greaterThanOneButNotThree = n => n > 1 && n !== 3;
expect(100).toSatisfy(greaterThanOneButNotThree);
expect(0).not.toSatisfy(greaterThanOneButNotThree);
expect(3).not.toSatisfy(greaterThanOneButNotThree);
});
Feature Request
Use .toContainAnyKeys
when checking if an object contains at least one of the provided keys.
test('passes when object contains at least one matching key', () => {
const o = { a: 'hello', b: 'world' };
expect(o).toContainAnyKeys(['a']);
expect(o).toContainAnyKeys(['b']);
expect(o).toContainAnyKeys(['b', 'c']);
expect(o).not.toContainAnyKeys(['c']);
});
Feature Request
Use .toBeSealed
when checking if an object is sealed.
test('passes when value is sealed', () => {
expect(Object.seal({})).toBeSealed();
expect({}).not.toBeSealed();
expect(1).not.toBeSealed();
});
Feature Request
Use .toEndWith
when checking if a String
ends with a given String
suffix.
test('passes when value is ends with given string', () => {
expect('hello world').toEndWith('world');
expect('hello world').not.toEndWith('hello');
});
Feature Request
Use .toHaveBeenCalledBefore
when checking if a mock has been called before another mock.
it('calls mock1 before mock2', () => {
const mock1 = jest.fn();
const mock2 = jest.fn();
mock1();
mock2();
mock1();
expect(mock1).toHaveBeenCalledBefore(mock2);
});
Feature Request
Description: A matcher that checks that two arrays contain the same elements. Examples:
expect([1, 2]).toMatchArray([2, 1]) // order doesn't matter!
expect([1, 2, 2]).toMatchArray([2, 1, 2]) // same number of 2s, all good
expect([1, 2]).not.toMatchArray([1, 2, 2]) // one extra 2, FAIL
expect([1, 2, 2]).not.toMatchArray([1, 2]) // one extra 2, FAIL
Possible solution: Given arrays A and B, check that they are equal in length. For each element in A, check that the element is equal to any element in B. If it is, remove the element from both arrays. Loop until both arrays are empty.
Feature Request
Use .toBeBoolean
when checking if a value is a Boolean
.
test('passes when value is a boolean', () => {
expect(false).toBeBoolean();
expect(true).toBeBoolean();
expect(1 === 1).toBeBoolean();
expect(1).not.toBeBoolean();
});
Feature Request
Use .toIncludeRepeated
when checking if a String
includes the given String
substring the correct number of times.
test('passes when value includes substring n times', () => {
expect('hello hello world').toIncludeRepeated('hello', 2);
expect('hello hello world').not.toIncludeRepeated('hello', 1);
});
Feature Request
Use .toIncludeMultiple
when checking if a String
includes all of the given substrings.
test('passes when value includes all substrings', () => {
expect('hello world').toInclude(['world', 'hello']);
expect('hello world').not.toInclude(['world', 'hello', 'bob']);
});
Feature Request
Use .toBeArray
when checking if a value is an Array
.
test('passes when value is an array', () => {
expect([]).toBeArray();
expect([1]).toBeArray();
expect(true).not.toBeArray();
});
Feature Request
Use .toBePositive
when checking if a value is a positive Number
.
test('passes when value is a positive number', () => {
expect(1).toBePositive();
expect(Infinity).not.toBePositive();
expect(-1).not.toBePositive();
expect(NaN).not.toBePositive();
});
Feature Request
Use .toContainAnyEntries
when checking if an object contains at least one of the provided entries.
test('passes when object contains at least one of the given entries', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainAnyEntries([['a', 'qux'], ['a', 'foo']]);
expect(o).toContainAnyEntries([['a', 'qux'], ['b', 'bar']]);
expect(o).toContainAnyEntries([['a', 'qux'], ['c', 'baz']]);
expect(o).not.toContainAnyEntries([['d', 'qux']]);
});
Feature Request
Use .toBeObject
when checking if a value is an Object
.
test('passes when value is an object', () => {
expect({}).toBeObject();
expect({ a: 'hello' }).toBeObject();
expect(true).not.toBeObject();
});
Feature Request
Use .toBeNegative
when checking if a value is a negative Number
.
test('passes when value is a negative number', () => {
expect(-1).toBeNegative();
expect(-Infinity).not.toBeNegative();
expect(1).not.toBeNegative();
expect(NaN).not.toBeNegative();
});
Feature Request
Use .toBeEven
when checking if a value is an even Number
.
test('passes when value is an even number', () => {
expect(2).toBeEven();
expect(1).not.toBeEven();
expect(NaN).not.toBeEven();
});
Feature Request
Hey! This repo looks good, I like the idea of extended matchers.
We've recently created an organisation for community modules: jest-community.
How do you feel about transferring this repository there?
Feature Request
Use .toBeFinite
when checking if a value is a Number
, not NaN
or Infinity
.
test('passes when value is a finite number', () => {
expect(1).toBeFinite();
expect(Infinity).not.toBeFinite();
expect(NaN).not.toBeFinite();
});
Feature Request
Use .toBeOdd
when checking if a value is an odd Number
.
test('passes when value is an odd number', () => {
expect(1).toBeOdd();
expect(2).not.toBeOdd();
expect(NaN).not.toBeOdd();
});
Feature Request
Description:
Use .toBeEmpty
when checking if a String
''
, Array
[]
or Object
{}
is empty.
test('passes when given an empty string', () => {
expect('').toBeEmpty();
expect('hello').not.toBeEmpty();
});
test('passes when given an empty array', () => {
expect([]).toBeEmpty();
expect(['hello']).not.toBeEmpty();
});
test('passes when given an empty object', () => {
expect({}).toBeEmpty();
expect({ hello: 'world' }).not.toBeEmpty();
});
Feature Request
Use .toContainEntry
when checking if an object contains the provided entry.
test('passes when object contains given entry', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainEntry(['a', 'foo']);
expect(o).toContainEntry(['b', 'bar']);
expect(o).toContainEntry(['c', 'baz']);
expect(o).not.toContainEntry(['a', 'qux']);
});
Bug
I would expect this test to fail, as the tested object does not contain a key baz
. However this test will pass.
test('toContainAllKeys should fail', () => {
expect({ foo: 'bar' }).toContainAllKeys([ 'foo', 'baz' ])
})
Feature Request
Description:
Use .toBeNil
when checking a value is null or undefined.
test('passes when value is null or undefined', () => {
expect(null).toBeNil();
expect(undefined).toBeNil();
expect(true).not.toBeNil();
});
Feature Request
Use .toHaveSomeMembers
when checking if an Array
contains some of the members of a given set.
test('passes when given array values match the members of the set', () => {
expect([1, 2, 3]).toHaveSomeMembers([2, 1, 3]);
expect([1, 2, 2]).toHaveSomeMembers([2]);
expect([1, 2, 2]).not.toHaveSomeMembers([3]);
});
Feature Request
Use .toContainKeys
when checking if an object has all of the provided keys.
test('passes when object contains all keys', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainKeys(['a', 'b']);
expect(o).toContainKeys(['b', 'c']);
expect(o).not.toContainKeys(['d']);
});
Feature Request
Use .toHaveAllMembers
when checking if an Array
contains all of the same members of a given set.
test('passes when given array values match the members of the set', () => {
expect([1, 2, 3]).toHaveAllMembers([2, 1, 3]);
expect([1, 2, 2]).toHaveAllMembers([2, 1]);
});
Feature Request
Description:
API for Date matchers. Some matchers are inspired by Jasmine Matchers.
Possible solution:
Jasmine-like matchers:
expect(date).toBeDate(); // Matcher added
expect(date).toBeValidDate(); // Matcher added
expect(date).toBeAfter(otherDate); // Matcher added
expect(date).toBeBefore(otherDate); // Matcher added
expect(object).toHaveDate(memberName);
expect(object).toHaveDateAfter(memberName, date);
expect(object).toHaveDateBefore(memberName, date);
Additional matchers:
expect(date).toBeAfterOrEqualTo(otherDate); // or toBeGreaterThanOrEqualTo
expect(date).toBeBeforeOrEqualTo(otherDate); // or toBeLessThanOrEqualTo
expect(date).toBeBetween(startDate, endDate);
expect(date).toDiffInDays(otherDate, days); // e.g., expect( '12/25/2018' ).toDiffInDays( '12/24/2018', 1 );
expect( date ).toHaveDay( day );
expect( date ).toHaveMonth( month );
expect( date ).toHaveYear( year );
Feature Request
Use .toContainAllEntries
when checking if an object only contains all of the provided entries.
test('passes when object only contains all of the given entries', () => {
const o = { a: 'foo', b: 'bar', c: 'baz' };
expect(o).toContainAllEntries([['a', 'foo'], ['b', 'bar'], ['c', 'baz']]);
expect(o).not.toContainAllEntries([['a', 'foo'], ['b', 'bar']]);
});
Bug
package
version: 0.6.0node
version: 9.6.1npm
version: 5.6.0toContainAllKeys
will always pass when testing an empty object.
Here's a simple example to reproduce the issue.
test('toContainAllKeys should fail', () => {
expect({}).toContainAllKeys(['foo'])
})
I'll open a PR to fix this shortly
Feature Request
Use .toInclude
when checking if a String
includes the given String
substring.
test('passes when value includes substring', () => {
expect('hello world').toInclude('ell');
expect('hello world').not.toInclude('bob');
});
Feature Request
Description:
Use .toBeNaN
when checking a value is NaN
.
test('passes when value is NaN', () => {
expect(NaN).toBeNaN();
expect(1).not.toBeNaN();
});
Feature Request
Use .toBeOneOf
when checking if a value is a member of a given Array
.
test('passes when value is in given array', () => {
expect(1).toBeOneOf([1, 2, 3]);
expect(4).not.toBeOneOf([1, 2, 3]);
});
Feature Request
Use .toBeExtensible
when checking if an object is extensible.
test('passes when value is extensible', () => {
expect({a: 1}).toBeExtensible();
expect(1).not.toBeExtensible();
});
Feature Request
Description:
Use .toBeWithin
when checking if a number is in between the given bounds of: start (inclusive) and end (exclusive).
test('passes when number is within given bounds', () => {
expect(1).toBeWithin(1, 3);
expect(2).toBeWithin(1, 3);
expect(3).not.toBeWithin(1, 3);
});
Feature Request
Use .toBeFrozen
when checking if an object is frozon.
test('passes when value is frozen', () => {
expect(Object.frozen({})).toBeFrozen();
expect({}).not.toBeFrozen();
expect(1).not.toBeFrozen();
});
Feature Request
Description:
Our README uses test
, but our codebase has it
at a few places.
The Jest docs use test
everywhere. Although it
is just an alias of test
, should we switch to using test
everywhere in our codebase to make it consistent with our README (as well as the Jest docs)?
Possible solution:
Use test
instead of it
Let me know if you are ok with the change and I will send a PR.
Feature Request
Follow-up of: jestjs/jest#5363
.toHaveBeenCalledTimely
accepts an array of temporal differences in milliseconds which specify the maximum time in between invocations to a mock. The matcher fails when at least one of the specified timing constraints is not fulfilled.
Example:
it('should retry 2 times with exponential back-off with a factor of 2', async () => {
jest.doMock('foo-api', jest.fn(() => fooApiMocks.helloSuccessAsync()));
const fooApi = require('foo-api');
myModuleWhichDependsOnFooApi.execute();
expect(fooApi.hello).toHaveBeenCalledTimely([
2000, // 1st retry - time between 1st and 2nd call to fooApi.hello()
4000 // 2nd retry - time between 2nd and 3rd call to fooApi.hello()
]);
});
Following the reasoning outlined here and issue reported in #98, would the above be possible before #98 is addressed and resolved?
If possible, I'd very much like to work on a PR for this. ๐
Thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.