Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework.
For more information or to download plugins, view the [documentation](http://chaijs.com). ## What is Chai? Chai is an _assertion library_, similar to Node's built-in `assert`. It makes testing much easier by giving you lots of assertions you can run against your code. ## Installation ### Node.js `chai` is available on [npm](http://npmjs.org). To install it, type: $ npm install --save-dev chai ### Browsers You can also use it within the browser; install via npm and use the `chai.js` file found within the download. For example: ```html ``` ## Usage Import the library in your code, and then pick one of the styles you'd like to use - either `assert`, `expect` or `should`: ```js var chai = require('chai'); var assert = chai.assert; // Using Assert style var expect = chai.expect; // Using Expect style var should = chai.should(); // Using Should style ``` ### Pre-Native Modules Usage (_registers the chai testing style globally_) ```js require('chai/register-assert'); // Using Assert style require('chai/register-expect'); // Using Expect style require('chai/register-should'); // Using Should style ``` ### Pre-Native Modules Usage (_as local variables_) ```js const { assert } = require('chai'); // Using Assert style const { expect } = require('chai'); // Using Expect style const { should } = require('chai'); // Using Should style should(); // Modifies `Object.prototype` const { expect, use } = require('chai'); // Creates local variables `expect` and `use`; useful for plugin use ``` ### Native Modules Usage (_registers the chai testing style globally_) ```js import 'chai/register-assert'; // Using Assert style import 'chai/register-expect'; // Using Expect style import 'chai/register-should'; // Using Should style ``` ### Native Modules Usage (_local import only_) ```js import { assert } from 'chai'; // Using Assert style import { expect } from 'chai'; // Using Expect style import { should } from 'chai'; // Using Should style should(); // Modifies `Object.prototype` ``` ### Usage with Mocha ```bash mocha spec.js -r chai/register-assert # Using Assert style mocha spec.js -r chai/register-expect # Using Expect style mocha spec.js -r chai/register-should # Using Should style ``` [Read more about these styles in our docs](http://chaijs.com/guide/styles/). ## Plugins Chai offers a robust Plugin architecture for extending Chai's assertions and interfaces. - Need a plugin? View the [official plugin list](http://chaijs.com/plugins). - Want to build a plugin? Read the [plugin api documentation](http://chaijs.com/guide/plugins/). - Have a plugin and want it listed? Simply add the following keywords to your package.json: - `chai-plugin` - `browser` if your plugin works in the browser as well as Node.js - `browser-only` if your plugin does not work with Node.js ### Related Projects - [chaijs / chai-docs](https://github.com/chaijs/chai-docs): The chaijs.com website source code. - [chaijs / assertion-error](https://github.com/chaijs/assertion-error): Custom `Error` constructor thrown upon an assertion failing. - [chaijs / deep-eql](https://github.com/chaijs/deep-eql): Improved deep equality testing for Node.js and the browser. - [chaijs / type-detect](https://github.com/chaijs/type-detect): Improved typeof detection for Node.js and the browser. - [chaijs / check-error](https://github.com/chaijs/check-error): Error comparison and information related utility for Node.js and the browser. - [chaijs / loupe](https://github.com/chaijs/loupe): Inspect utility for Node.js and browsers. - [chaijs / pathval](https://github.com/chaijs/pathval): Object value retrieval given a string path. - [chaijs / get-func-name](https://github.com/chaijs/get-func-name): Utility for getting a function's name for node and the browser. ### Contributing Thank you very much for considering to contribute! Please make sure you follow our [Code Of Conduct](https://github.com/chaijs/chai/blob/master/CODE_OF_CONDUCT.md) and we also strongly recommend reading our [Contributing Guide](https://github.com/chaijs/chai/blob/master/CONTRIBUTING.md). Here are a few issues other contributors frequently ran into when opening pull requests: - Please do not commit changes to the `chai.js` build. We do it once per release. - Before pushing your commits, please make sure you [rebase](https://github.com/chaijs/chai/blob/master/CONTRIBUTING.md#pull-requests) them. ### Contributors Please see the full [Contributors Graph](https://github.com/chaijs/chai/graphs/contributors) for our list of contributors. ### Core Contributors Feel free to reach out to any of the core contributors with your questions or concerns. We will do our best to respond in a timely manner. [![Jake Luer](https://avatars3.githubusercontent.com/u/58988?v=3&s=50)](https://github.com/logicalparadox) [![Veselin Todorov](https://avatars3.githubusercontent.com/u/330048?v=3&s=50)](https://github.com/vesln) [![Keith Cirkel](https://avatars3.githubusercontent.com/u/118266?v=3&s=50)](https://github.com/keithamus) [![Lucas Fernandes da Costa](https://avatars3.githubusercontent.com/u/6868147?v=3&s=50)](https://github.com/lucasfcosta) [![Grant Snodgrass](https://avatars3.githubusercontent.com/u/17260989?v=3&s=50)](https://github.com/meeber)