New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

jest-structure

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jest-structure

Jest assertions to use with Structure

  • 2.0.1
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
13
decreased by-58.06%
Maintainers
1
Weekly downloads
 
Created
Source

jest-structure

Custom Jest matchers to test Structure instances.

Example usage

expect(user).toBeValidStructure();

expect(user).toBeInvalidStructure();

expect(user).toHaveInvalidAttribute(['name']);

expect(user).toHaveInvalidAttribute(['name'], ['"name" is required']);

expect(user).toHaveInvalidAttribute(['name'], expect.arrayContaining(['"name" is required']));

expect(user).toHaveInvalidAttributes([
  { path: ['name'], messages: expect.arrayContaining(['"name" is required']) },
  {
    path: ['age'],
    messages: ['"age" must be larger than or equal to 2', '"age" must be a positive number'],
  },
]);

Installation

jest-structure is available in npm, so you can install it with npm or yarn as a development dependency:

npm install --save-dev jest-structure

# or

yarn --dev add jest-structure

Setup

After installing, you need to tell Jest to use jest-structure, this can be done in two ways:

  1. By importing and manually adding it to Jest (in a setup file or directly in the top of your test file):
import jestStructure from 'jest-structure';

expect.extend(jestStructure);
  1. By allowing jest-structure to add itself to Jest matchers:
import 'jest-structure/extend-expect';

Matchers

toBeValidStructure()

This matcher passes if the structure is valid:

const User = attributes({
  name: { type: String, required: true },
})(class User {});

const validUser = new User({ name: 'Me' });

expect(validUser).toBeValidStructure(); // passes

const invalidUser = new User();

expect(invalidUser).toBeValidStructure(); // fails

toBeInvalidStructure()

This matcher passes if the structure is invalid:

const User = attributes({
  name: { type: String, required: true },
})(class User {});

const invalidUser = new User();

expect(invalidUser).toBeInvalidStructure(); // passes

const validUser = new User({ name: 'Me' });

expect(validUser).toBeInvalidStructure(); // fails

toHaveInvalidAttribute(path, messages)

This matcher allows you to assert that a single attribute of the structure is invalid, optionally passing the array of error messages for that attribute:

const User = attributes({
  name: { type: String, required: true },
  age: { type: Number, required: true },
})(class User {});

const user = new User({ age: 42 });

// passes, because name is invalid
expect(user).toHaveInvalidAttribute(['name']);

// fails, because age is valid
expect(user).toHaveInvalidAttribute(['age']);

// passes, because name is invalid with this message
expect(user).toHaveInvalidAttribute(['name'], ['"name" is required']);

// fails, because name is invalid but not with this message
expect(user).toHaveInvalidAttribute(['name'], ['"name" is not cool']);

// passes. Notice that you can even use arrayContaining to check for a subset of the errros
expect(user).toHaveInvalidAttribute(['name'], expect.arrayContaining(['"name" is required']));

// passes. And stringContaining can be used as well
expect(user).toHaveInvalidAttribute(['name'], [expect.stringContaining('required')]);

toHaveInvalidAttributes([ { path, messages } ])

This matcher allows you to assert that multiple attributes of the structure are invalid, optionally passing the array of error messages for each attribute:

const User = attributes({
  name: { type: String, required: true },
  age: { type: Number, required: true },
})(class User {});

const user = new User({ age: 42 });

// passes, because name is invalid
expect(user).toHaveInvalidAttributes([{ path: ['name'] }]);

// fails, because age is valid
expect(user).toHaveInvalidAttributes([{ path: ['age'] }]);

// fails, because name is invalid but age is valid
expect(user).toHaveInvalidAttributes([{ path: ['name'] }, { path: ['age'] }]);

// passes, because name is invalid with this message
expect(user).toHaveInvalidAttributes([{ path: ['name'], messages: ['"name" is required'] }]);

// fails, because name is invalid but not with this message
expect(user).toHaveInvalidAttributes([{ path: ['name'], messages: ['"name" is not cool'] }]);

// passes. Notice that you can even use arrayContaining to check for a subset of the errros
expect(user).toHaveInvalidAttributes([
  { path: ['name'], messages: expect.arrayContaining(['"name" is required']) },
]);

// passes. And stringContaining can be used as well
expect(user).toHaveInvalidAttributes([
  { path: ['name'], messages: [expect.stringContaining('required')] },
]);

FAQs

Package last updated on 15 Jun 2020

Did you know?

Socket

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc