Socket
Socket
Sign inDemoInstall

jest-sorted

Package Overview
Dependencies
0
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    jest-sorted

Inspired by chai sorted and jest-extended. This packages extends jest.expect with 2 custom matchers, `toBeSorted` and `toBeSortedBy`


Version published
Weekly downloads
7.4K
decreased by-12.94%
Maintainers
1
Install size
18.6 kB
Created
Weekly downloads
 

Readme

Source

Jest Sorted

Inspired by chai sorted and jest-extended. This packages extends jest.expect with 2 custom matchers, toBeSorted and toBeSortedBy

Examples

expect([1, 2, 3]).toBeSorted();
expect([3, 2, 1]).toBeSorted({ descending: true });

expect([{ id: 1 }, { id: 2 }, { id: 3 }]).toBeSortedBy('id');
expect([{ count: '10' }, { count: '5' }]).toBeSortedBy('count', {
  descending: true,
  coerce: true,
});

Installation

With npm:

npm install --save-dev jest-sorted

With yarn:

yarn add -D jest-sorted

Setup

Jest >v24

Add jest-sorted to your Jest setupFilesAfterEnv configuration. See for help

For example, add the following to your package.json at the root level. See configuring jest for more info.

"jest": {
  "setupFilesAfterEnv": ["jest-sorted"]
}

Jest <v23

"jest": {
  "setupTestFrameworkScriptFile": "jest-sorted"
}

If you are already using another test framework, like jest-chain, then you should create a test setup file and require each of the frameworks you are using.

For example:

// ./testSetup.js
require('jest-sorted');
require('jest-chain');
require('any other test framework libraries you are using');

Then in your Jest config:

"jest": {
  "setupTestFrameworkScriptFile": "./testSetup.js"
}

Typescript

  • Coming soon...

Usage

toBeSorted

Passes if the array is sorted in ascending order.

expect([1, 2, 3]).toBeSorted();
options

The following options can be passed as an object to alter the assertions behaviour

  • descending : boolean - Asserts the array is sorted in descending order. (Defaults to false)
expect([3, 2, 1]).toBeSorted({ descending: true });
  • coerce : boolean - Coereces values to numbers before comparison. (Defaults to false) Note: consecutive NaN values after co-ercion are considered to be sorted
expect(['2', '12']).toBeSorted({ coerce: true });
  • key : string - Will use the value from the passed key in an array of objects. (Used internally by the toBeSortedBy method)
expect([{ id: 1 }, { id: 2 }, { id: 3 }]).toBeSorted({ key: 'id' });
  • strict : boolean - Fails the assertion if a passed key option does not exist in the object. (Defaults to true) Note: will use undefined for all missing keys and equal values are considered sorted.
expect([{ id: 1 }, { id: 2 }, { id: 3 }]).toBeSorted({
  key: 'nothing',
  strict: false,
});
  • compare : function - A custom function to use for comparison. (Default comparison is a simple greater / less than). In some cases you may want to check values are sorted by a different condition. The function will take 2 elements from the array (a,b) and should return:

    • A negative number if a comes first.
    • A positive number if b comes first.
    • 0 if the values are sorted equally.

See the compareFunction of Array.prototype.sort for more info.

const doubleDigitsFirst = (a, b) => {
  if (a >= 10 && b < 10) {
    return -1;
  }
  if (b >= 10 && a < 10) {
    return 1;
  }
  return 0;
};

expect([10, 20, 1, 2]).toBeSorted({
  compare: doubleDigitsFirst,
});

toBeSortedBy

Passes if the array of objects is sorted in ascending order by the passed key. (Alias for toBeSorted({ key }))

expect([{ id: 1 }, { id: 2 }, { id: 3 }]).toBeSortedBy('id');
options

The following options can be passed as an object to alter the assertions behaviour

  • descending : boolean - Asserts the array is sorted in descending order. (Defaults to false)
expect([{ id: 3 }, { id: 2 }, { id: 1 }]).toBeSortedBy('id', {
  descending: true,
});
  • coerce : boolean - Coereces values to numbers before comparison. (Defaults to false) Note: consecutive NaN values after co-ercion are considered to be sorted
expect([{ count: '2' }, { count: '12' }]).toBeSortedBy('count', {
  coerce: true,
});
  • strict : boolean - Fails the assertion if a passed key option does not exist in the object. (Defaults to true) Note: will use undefined for all missing keys and equal values are considered sorted.
expect([{ id: 3 }, { id: 2 }, { id: 1 }]).toBeSortedBy('nothing', {
  strict: false,
});
  • compare : function - A custom function to use for comparison. (Default comparison is a simple greater / less than). In some cases you may want to check values are sorted by a different condition. The function will take 2 values from the specified keys (a,b) and should return:

    • A negative number if a comes first.
    • A positive number if b comes first.
    • 0 if the values are sorted equally.

See the compareFunction of Array.prototype.sort for more info.

const doubleDigitsFirst = (a, b) => {
  if (a >= 10 && b < 10) {
    return -1;
  }
  if (b >= 10 && a < 10) {
    return 1;
  }
  return 0;
};

expect([{ count: 10 }, { count: 20 }, { count: 1 }, { count: 2 }]).toBeSortedBy(
  'count',
  {
    compare: doubleDigitsFirst,
  }
);

Keywords

FAQs

Last updated on 19 Feb 2024

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