Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

expect-proptypes

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

expect-proptypes - npm Package Compare versions

Comparing version 0.1.0 to 0.2.0

5

package.json
{
"name": "expect-proptypes",
"version": "0.1.0",
"version": "0.2.0",
"description": "Allows expect to use",

@@ -16,3 +16,4 @@ "main": "src/index.js",

"extended-proptypes": "^1.1.5",
"mocha": "^3.2.0"
"mocha": "^3.2.0",
"proptypes": "^0.14.4"
},

@@ -19,0 +20,0 @@ "peerDependencies": {

# expect-proptypes
This library allows assertions about object shapes using React's PropTypes library or the standalone [proptypes library](https://www.npmjs.com/package/proptypes) on npm.
This library extends [expect](https://github.com/mjackson/expect) to allow for assertions about object shapes, using React's PropTypes library or the standalone [proptypes library](https://www.npmjs.com/package/proptypes) on npm.

@@ -32,3 +32,6 @@ ## Usage

## How can I get better error logging?
If your proptypes have a property `__name__` which is a string, this will be used in the error logs.
## What if I want more detailed types?
Consider using my library [extended-proptypes](https://www.npmjs.com/package/extended-proptypes), which adds many useful validators, such as dates,constants, constants and regex matching for strings and object keys.

16

src/index.js

@@ -14,2 +14,10 @@ const util = require("util");

let name = "expectation";
if (expectedPropTypes.__name__ && typeof expectedPropTypes.__name__ === "string") {
name = expectedPropTypes.__name__;
// clone and delete name prop
expectedPropTypes = Object.assign({}, expectedPropTypes);
delete expectedPropTypes.__name__;
}
if (!allowExtraProps) {

@@ -19,3 +27,3 @@ const extraProps = Object.keys(input)

if (extraProps.length > 0) {
throw new Error(`object has extra props: ${extraProps.join(", ")}`)
throw new Error(`input has extra props: ${extraProps.join(", ")}`)
}

@@ -27,3 +35,7 @@ }

.map((prop) => {
const err = expectedPropTypes[prop](input, prop, expectedPropTypes.name || "expect", "prop")
const validator = expectedPropTypes[prop];
if (typeof validator !== "function") {
throw new Error(`invalid validator (not a function): ${validator}`)
}
const err = validator(input, prop, name, "prop");
if (!err) return null;

@@ -30,0 +42,0 @@ return `\n - ${err.message}`;

@@ -61,2 +61,9 @@ const expect = require("expect");

it("fails if a validator is not a function", () => {
shouldThrow(
() => expect({}).toHaveProps({foo: "bar"}),
"invalid validator (not a function): bar"
);
});
it("fails if actual value does not match expected shape", () => {

@@ -73,5 +80,5 @@ const input = {

`invalid propTypes
- Invalid prop \`num\` of type \`string\` supplied to \`expect\`, expected \`number\`.
- Required prop \`str\` was not specified in \`expect\`.
- Invalid prop \`obj.arr[2]\` of type \`boolean\` supplied to \`expect\`, expected \`string\`.`
- Invalid prop \`num\` of type \`string\` supplied to \`expectation\`, expected \`number\`.
- Required prop \`str\` was not specified in \`expectation\`.
- Invalid prop \`obj.arr[2]\` of type \`boolean\` supplied to \`expectation\`, expected \`string\`.`
);

@@ -93,6 +100,22 @@ });

() => expect(input).toHaveProps(shape),
`object has extra props: extraProperty`
`input has extra props: extraProperty`
);
});
it("can add shape name to errors", () => {
const namedShape = {
__name__: "My Shape",
num: pt.number,
};
const input = {
num: "1",
};
shouldThrow(
() => expect(input).toHaveProps(namedShape),
`invalid propTypes
- Invalid prop \`num\` of type \`string\` supplied to \`My Shape\`, expected \`number\`.`
);
});
it("passes if actual value matches expected shape", () => {

@@ -142,2 +165,9 @@ const input = {

it("fails if a validator is not a function", () => {
shouldThrow(
() => expect({}).toContainProps({foo: "bar"}),
"invalid validator (not a function): bar"
);
});
it("fails if actual value does not match expected shape", () => {

@@ -154,5 +184,5 @@ const input = {

`invalid propTypes
- Invalid prop \`num\` of type \`string\` supplied to \`expect\`, expected \`number\`.
- Required prop \`str\` was not specified in \`expect\`.
- Invalid prop \`obj.arr[2]\` of type \`boolean\` supplied to \`expect\`, expected \`string\`.`
- Invalid prop \`num\` of type \`string\` supplied to \`expectation\`, expected \`number\`.
- Required prop \`str\` was not specified in \`expectation\`.
- Invalid prop \`obj.arr[2]\` of type \`boolean\` supplied to \`expectation\`, expected \`string\`.`
);

@@ -174,2 +204,19 @@ });

it("can add shape name to errors", () => {
const namedShape = {
__name__: "My Shape",
num: pt.number,
};
const input = {
num: "1",
foo: "bar",
};
shouldThrow(
() => expect(input).toContainProps(namedShape),
`invalid propTypes
- Invalid prop \`num\` of type \`string\` supplied to \`My Shape\`, expected \`number\`.`
);
});
it("passes if actual value matches expected shape", () => {

@@ -176,0 +223,0 @@ const input = {

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