![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
jest-structure
Advanced tools
Custom Jest matchers to test Structure instances.
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'],
},
]);
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
After installing, you need to tell Jest to use jest-structure, this can be done in two ways:
import jestStructure from 'jest-structure';
expect.extend(jestStructure);
import 'jest-structure/extend-expect';
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
Jest assertions to use with Structure
The npm package jest-structure receives a total of 13 weekly downloads. As such, jest-structure popularity was classified as not popular.
We found that jest-structure demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.