All Projects → developit → Preact Jsx Chai

developit / Preact Jsx Chai

Licence: mit
✅ Add JSX assertions to Chai, with support for Preact Components.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Preact Jsx Chai

Javascript Testing Best Practices
📗🌐 🚢 Comprehensive and exhaustive JavaScript & Node.js testing best practices (August 2021)
Stars: ✭ 13,976 (+24857.14%)
Mutual labels:  test, chai
patent-free-react-ecosystem-migration-plan
Patent Free React Ecosystem Migration Plan
Stars: ✭ 15 (-73.21%)
Mutual labels:  preact, chai
Chai Immutable
Chai assertions for Facebook's Immutable library for JavaScript collections
Stars: ✭ 161 (+187.5%)
Mutual labels:  test, chai
Enzyme
JavaScript Testing utilities for React
Stars: ✭ 19,781 (+35223.21%)
Mutual labels:  test, chai
Preact Render Spy
Render preact components with access to the produced virtual dom for testing.
Stars: ✭ 178 (+217.86%)
Mutual labels:  test, preact
Chakram
REST API test framework. BDD and exploits promises
Stars: ✭ 912 (+1528.57%)
Mutual labels:  test, chai
Should Enzyme
Useful functions for testing React Components with Enzyme.
Stars: ✭ 41 (-26.79%)
Mutual labels:  test
Ts Preact Starter
Barebones starter project for Preact with TypeScript
Stars: ✭ 49 (-12.5%)
Mutual labels:  preact
Razzle Unrouted
Blazingly fast server-rendered MVC Webapps with Preact and Webpack
Stars: ✭ 39 (-30.36%)
Mutual labels:  preact
Cmonoptus
Why am I not getting what I pay for?
Stars: ✭ 35 (-37.5%)
Mutual labels:  test
Backbone Faux Server
A framework for mocking up server-side persistence / processing for Backbone.js
Stars: ✭ 55 (-1.79%)
Mutual labels:  test
Aws Testing Library
Chai (https://chaijs.com) and Jest (https://jestjs.io/) assertions for testing services built with aws
Stars: ✭ 52 (-7.14%)
Mutual labels:  chai
Testify
A unit testing framework written in bash for bash scripts
Stars: ✭ 45 (-19.64%)
Mutual labels:  test
Orleanstestkit
Unit Test Toolkit for Microsoft Orleans
Stars: ✭ 42 (-25%)
Mutual labels:  test
Powerslim
Fitnesse Slim implementation in PowerShell. PowerSlim makes it possible to use PowerShell in the acceptance testing
Stars: ✭ 49 (-12.5%)
Mutual labels:  test
Whack A Mole
Offline-first arcade game for children
Stars: ✭ 40 (-28.57%)
Mutual labels:  preact
Kahlan
✔️ PHP Test Framework for Freedom, Truth, and Justice
Stars: ✭ 1,065 (+1801.79%)
Mutual labels:  test
Blaze
⚡ File sharing progressive web app built using WebTorrent and WebSockets
Stars: ✭ 991 (+1669.64%)
Mutual labels:  preact
Ezxss
ezXSS is an easy way for penetration testers and bug bounty hunters to test (blind) Cross Site Scripting.
Stars: ✭ 1,022 (+1725%)
Mutual labels:  test
Navi
Open Source Project for Grow with Google Udacity Scholarship Challenge - Navigation app using offline first strategy and google maps api - To get started please refer to the README.md - CONTRIBUTING.md and the project Wiki
Stars: ✭ 51 (-8.93%)
Mutual labels:  preact

preact-jsx-chai

Greenkeeper badge

NPM travis-ci

Extend Chai with support for asserting JSX equality & contents with support for Preact Components.

(Heavily) inspired by jsx-chai.


Usage

import { h } from 'preact'; /** @jsx h */

import chai, { expect } from 'chai';
import assertJsx from 'preact-jsx-chai';
chai.use(assertJsx);

// check if two JSX DOMs are deeply equal:
expect(
	<div id="1">a</div>
).to.deep.equal(
	<div id="1">a</div>
);

// check if a given JSX DOM contains the given fragment:
expect(
	<div> <span>foo!</span> </div>
).to.contain(
	<span>foo!</span>
);

Note: in environments like Karma where chai is available as a global, preact-jsx-chai will automatically register itself on import. Don't worry, though, this plugin is smart enough to avoid registering itself multiple times.


Options

There are a few global options available to customize how preact-jsx-chai asserts over VNodes.

Name Type Default Description
isJsx Function auto Override the detection of values as being JSX VNodes.
functions Boolean true If false, props with function values will be omitted from the comparison entirely
functionNames Boolean true If false, ignores function names and bound state, asserting only that the compared props are functions
To set these options:
import { options } from 'preact-jsx-chai';
options.functions = false;

// or:

import jsxChai from 'preact-jsx-chai';
jsxChai.options.functions = false;

Assertions

Deep, fully rendered equality/inclusion is checked for: .deep.equal, .eql, .include, and .contain

Shallow, JSX only equality/inclusion is checked for: .equal, .shallow.include, and .shallow.contain

let Outer = ({a}) => <Inner a={a}/>
let Inner = ({a}) => <div>{a}</div>

// JSX tests
expect(<Outer />).to.be.jsx
expect('Outer').to.not.be.jsx

// Deep equality tests
expect(<Outer a="foo"/>).to.deep.equal(<Inner a="foo" notRenderedProp="x" />)
expect(<Outer a="foo"/>).to.deep.equal(<div>foo</div>/>)
expect(<Outer a="foo"/>).to.not.deep.equal(<Inner a="NotBar"/>)
expect(<Outer />).to.eql(<Outer />) // .eql is shorthand for .deep.equal
expect(<Outer a="foo"/>).to.not.eql(<Inner a="NotFoo"/>)

// Shallow Equality tests
expect(<Outer a="foo"/>).to.equal(<Inner a="foo" />)
expect(<Outer a="foo"/>).to.not.equal(<Inner a="foo" verifiedJSXProp="x" />)
expect(<Outer a="foo"/>).to.not.equal(<div>foo</div>) // <Inner /> is not rendered

let WrappedOuter = ({a}) => <div id="outer"><Inner a={a} /></div>

// Deep includes/contains tests
expect(<WrappedOuter a="foo" />).to.include(<div>foo</div>)
expect(<WrappedOuter a="foo" />).to.contain(<div>foo</div>)
expect(<WrappedOuter a="foo" />).to.contain(<Inner a="foo" />)
expect(<WrappedOuter a="foo" />).to.not.include(<div>Bad Div</div>)

// Shallow includes/contains tests
expect(<WrappedOuter a="foo" />).to.shallow.contain(<Inner a="foo" />)
expect(<WrappedOuter a="foo" />).to.not.shallow.include(<div>foo</div>)

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].