{
	"name": "chai-spies",
	"versions": {
		"0.1.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.1.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.2.x"
			},
			"optionalDependencies": {},
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake.luer@incatern.com"
			},
			"_id": "chai-spies@0.1.0",
			"_engineSupported": true,
			"_npmVersion": "1.1.0-3",
			"_nodeVersion": "v0.6.10",
			"_defaultsLoaded": true,
			"dist": {
				"shasum": "7216bf45ad88946c812402f159f0e4e7d820a09d",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.1.0.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.2.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.2.x"
			},
			"optionalDependencies": {},
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake.luer@incatern.com"
			},
			"_id": "chai-spies@0.2.0",
			"_engineSupported": true,
			"_npmVersion": "1.1.21",
			"_nodeVersion": "v0.6.18",
			"_defaultsLoaded": true,
			"dist": {
				"shasum": "9a14248e6886a7e606c8536853ba3403f63ad269",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.0.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.1": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.2.1",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.2.x"
			},
			"optionalDependencies": {},
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake.luer@incatern.com"
			},
			"_id": "chai-spies@0.2.1",
			"_engineSupported": true,
			"_npmVersion": "1.1.21",
			"_nodeVersion": "v0.6.18",
			"_defaultsLoaded": true,
			"dist": {
				"shasum": "e7139b16c188a80feb39cf15e77e2738fa143409",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.1.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.2": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.2.2",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.2.x"
			},
			"optionalDependencies": {},
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake.luer@incatern.com"
			},
			"_id": "chai-spies@0.2.2",
			"_engineSupported": true,
			"_npmVersion": "1.1.21",
			"_nodeVersion": "v0.6.18",
			"_defaultsLoaded": true,
			"dist": {
				"shasum": "a2f73b855aa190801aee0833e1ab37f2566c71a6",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.2.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.2.3": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.2.3",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake.luer@incatern.com"
			},
			"_id": "chai-spies@0.2.3",
			"_engineSupported": true,
			"_npmVersion": "1.1.24",
			"_nodeVersion": "v0.8.1",
			"_defaultsLoaded": true,
			"dist": {
				"shasum": "daf7ffd073b036efe7c40f571fc57e0f75a062cc",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.3.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.3.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.3.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake.luer@incatern.com"
			},
			"_id": "chai-spies@0.3.0",
			"_engineSupported": true,
			"_npmVersion": "1.1.24",
			"_nodeVersion": "v0.8.2",
			"_defaultsLoaded": true,
			"dist": {
				"shasum": "7a9dbbf809308ef7c73321ae3e93831b4f015cc4",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.3.0.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.4.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.4.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"_id": "chai-spies@0.4.0",
			"dist": {
				"shasum": "c13164ee32b39045cc9210497791d66ef9ba685e",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.4.0.tgz"
			},
			"_npmVersion": "1.1.62",
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake@alogicalparadox.com"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.5.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.5.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"_id": "chai-spies@0.5.0",
			"dist": {
				"shasum": "d202ce47cb64721d5c424c1eb4a47a0aec7fcbe3",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.5.0.tgz"
			},
			"_npmVersion": "1.1.63",
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake@alogicalparadox.com"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.5.1": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.5.1",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"_id": "chai-spies@0.5.1",
			"dist": {
				"shasum": "bc13c5b50a4b5219b42624a6583d5a2944c23e1e",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.5.1.tgz"
			},
			"_npmVersion": "1.1.63",
			"_npmUser": {
				"name": "jakeluer",
				"email": "jake@alogicalparadox.com"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake.luer@incatern.com"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.6.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.6.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"gitHead": "06e465d94887970535c2926da6b5ce7c33f2cf2b",
			"bugs": {
				"url": "https://github.com/logicalparadox/chai-spies/issues"
			},
			"homepage": "https://github.com/logicalparadox/chai-spies",
			"_id": "chai-spies@0.6.0",
			"_shasum": "2cf8f360c26cc4fb309115defba576ad4f0b669f",
			"_from": ".",
			"_npmVersion": "2.7.6",
			"_nodeVersion": "0.10.36",
			"_npmUser": {
				"name": "chaijs",
				"email": "chaijs@keithcirkel.co.uk"
			},
			"dist": {
				"shasum": "2cf8f360c26cc4fb309115defba576ad4f0b669f",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.6.0.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake@alogicalparadox.com"
				},
				{
					"name": "chaijs",
					"email": "chaijs@keithcirkel.co.uk"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.7.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.7.0",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"gitHead": "34797287a6ad059153b90806e835ca34a16430f6",
			"bugs": {
				"url": "https://github.com/logicalparadox/chai-spies/issues"
			},
			"homepage": "https://github.com/logicalparadox/chai-spies#readme",
			"_id": "chai-spies@0.7.0",
			"_shasum": "0f9137a3337310fedde8f5355374b56f49e4637f",
			"_from": ".",
			"_npmVersion": "2.12.1",
			"_nodeVersion": "2.2.1",
			"_npmUser": {
				"name": "chaijs",
				"email": "chaijs@keithcirkel.co.uk"
			},
			"dist": {
				"shasum": "0f9137a3337310fedde8f5355374b56f49e4637f",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.7.0.tgz"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake@alogicalparadox.com"
				},
				{
					"name": "chaijs",
					"email": "chaijs@keithcirkel.co.uk"
				}
			],
			"directories": {},
			"contributors": []
		},
		"0.7.1": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"version": "0.7.1",
			"repository": {
				"type": "git",
				"url": "git://github.com/logicalparadox/chai-spies.git"
			},
			"main": "./index",
			"scripts": {
				"test": "make test"
			},
			"engines": {
				"node": ">= 0.4.0"
			},
			"dependencies": {},
			"devDependencies": {
				"mocha": "*",
				"chai": "*",
				"folio": "0.3.x"
			},
			"optionalDependencies": {},
			"gitHead": "9309677747faae40badb5219d1ef41d039273a60",
			"bugs": {
				"url": "https://github.com/logicalparadox/chai-spies/issues"
			},
			"homepage": "https://github.com/logicalparadox/chai-spies",
			"_id": "chai-spies@0.7.1",
			"_shasum": "343d99f51244212e8b17e64b93996ff7b2c2a9b1",
			"_from": ".",
			"_npmVersion": "1.4.28",
			"_npmUser": {
				"name": "chaijs",
				"email": "chaijs@keithcirkel.co.uk"
			},
			"maintainers": [
				{
					"name": "jakeluer",
					"email": "jake@alogicalparadox.com"
				},
				{
					"name": "chaijs",
					"email": "chaijs@keithcirkel.co.uk"
				}
			],
			"dist": {
				"shasum": "343d99f51244212e8b17e64b93996ff7b2c2a9b1",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.7.1.tgz"
			},
			"directories": {},
			"contributors": []
		},
		"1.0.0": {
			"author": {
				"name": "Jake Luer",
				"email": "jake@alogicalparadox.com",
				"url": "http://alogicalparadox.com"
			},
			"name": "chai-spies",
			"description": "Spies for the Chai assertion library.",
			"keywords": [
				"chai",
				"chai-plugin",
				"browser",
				"mocks-and-spies",
				"testing",
				"spies",
				"stubs",
				"mocks"
			],
			"version": "1.0.0",
			"license": "MIT",
			"repository": {
				"type": "git",
				"url": "git://github.com/chaijs/chai-spies.git"
			},
			"main": "./index.js",
			"browser": "./chai-spies.js",
			"scripts": {
				"pretest": "npm run build",
				"test.only": "mocha --reporter spec test/*.js",
				"test": "npm run test.only",
				"build": "rollup -c support/compile.js"
			},
			"engines": {
				"node": ">= 4.0.0"
			},
			"peerDependencies": {
				"chai": "*"
			},
			"devDependencies": {
				"chai": "*",
				"mocha": "*",
				"rollup": "^0.53.4",
				"rollup-plugin-commonjs": "^8.2.6"
			},
			"gitHead": "1f79da565cb6bb0d05968341179e5af3be786e28",
			"bugs": {
				"url": "https://github.com/chaijs/chai-spies/issues"
			},
			"homepage": "https://github.com/chaijs/chai-spies#readme",
			"_id": "chai-spies@1.0.0",
			"_npmVersion": "5.4.2",
			"_nodeVersion": "8.8.0",
			"_npmUser": {
				"name": "chaijs",
				"email": "chaijs@keithcirkel.co.uk"
			},
			"dist": {
				"integrity": "sha512-elF2ZUczBsFoP07qCfMO/zeggs8pqCf3fZGyK5+2X4AndS8jycZYID91ztD9oQ7d/0tnS963dPkd0frQEThDsg==",
				"shasum": "d16b39336fb316d03abf8c375feb23c0c8bb163d",
				"tarball": "https://registry.npmjs.org/chai-spies/-/chai-spies-1.0.0.tgz"
			},
			"maintainers": [
				{
					"name": "chaijs",
					"email": "chaijs@keithcirkel.co.uk"
				}
			],
			"_npmOperationalInternal": {
				"host": "s3://npm-registry-packages",
				"tmp": "tmp/chai-spies-1.0.0.tgz_1515753129363_0.8703473624773324"
			},
			"directories": {},
			"contributors": []
		}
	},
	"time": {
		"modified": "2019-09-20T01:25:02.533Z",
		"created": "2012-02-13T18:58:15.770Z",
		"0.1.0": "2012-02-13T18:58:16.363Z",
		"0.2.0": "2012-05-16T20:17:40.042Z",
		"0.2.1": "2012-05-17T16:21:10.123Z",
		"0.2.2": "2012-05-17T16:40:51.212Z",
		"0.2.3": "2012-07-09T16:35:44.711Z",
		"0.3.0": "2012-07-11T14:46:05.984Z",
		"0.4.0": "2012-10-09T21:19:03.051Z",
		"0.5.0": "2012-11-15T01:05:38.804Z",
		"0.5.1": "2012-11-15T14:46:00.107Z",
		"0.6.0": "2015-04-26T15:58:37.740Z",
		"0.7.0": "2015-07-24T22:20:01.248Z",
		"0.7.1": "2015-09-21T20:55:41.053Z",
		"1.0.0": "2018-01-12T10:32:10.442Z"
	},
	"users": {},
	"dist-tags": {
		"latest": "1.0.0"
	},
	"_uplinks": {
		"npmjs": {
			"etag": "W/\"8ecc74cc9025f071733611a21e6ad646\"",
			"fetched": 1594815081061
		}
	},
	"_distfiles": {
		"chai-spies-0.1.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.1.0.tgz",
			"sha": "7216bf45ad88946c812402f159f0e4e7d820a09d",
			"registry": "npmjs"
		},
		"chai-spies-0.2.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.0.tgz",
			"sha": "9a14248e6886a7e606c8536853ba3403f63ad269",
			"registry": "npmjs"
		},
		"chai-spies-0.2.1.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.1.tgz",
			"sha": "e7139b16c188a80feb39cf15e77e2738fa143409",
			"registry": "npmjs"
		},
		"chai-spies-0.2.2.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.2.tgz",
			"sha": "a2f73b855aa190801aee0833e1ab37f2566c71a6",
			"registry": "npmjs"
		},
		"chai-spies-0.2.3.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.2.3.tgz",
			"sha": "daf7ffd073b036efe7c40f571fc57e0f75a062cc",
			"registry": "npmjs"
		},
		"chai-spies-0.3.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.3.0.tgz",
			"sha": "7a9dbbf809308ef7c73321ae3e93831b4f015cc4",
			"registry": "npmjs"
		},
		"chai-spies-0.4.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.4.0.tgz",
			"sha": "c13164ee32b39045cc9210497791d66ef9ba685e",
			"registry": "npmjs"
		},
		"chai-spies-0.5.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.5.0.tgz",
			"sha": "d202ce47cb64721d5c424c1eb4a47a0aec7fcbe3",
			"registry": "npmjs"
		},
		"chai-spies-0.5.1.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.5.1.tgz",
			"sha": "bc13c5b50a4b5219b42624a6583d5a2944c23e1e",
			"registry": "npmjs"
		},
		"chai-spies-0.6.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.6.0.tgz",
			"sha": "2cf8f360c26cc4fb309115defba576ad4f0b669f",
			"registry": "npmjs"
		},
		"chai-spies-0.7.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.7.0.tgz",
			"sha": "0f9137a3337310fedde8f5355374b56f49e4637f",
			"registry": "npmjs"
		},
		"chai-spies-0.7.1.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-0.7.1.tgz",
			"sha": "343d99f51244212e8b17e64b93996ff7b2c2a9b1",
			"registry": "npmjs"
		},
		"chai-spies-1.0.0.tgz": {
			"url": "https://registry.npmjs.org/chai-spies/-/chai-spies-1.0.0.tgz",
			"sha": "d16b39336fb316d03abf8c375feb23c0c8bb163d",
			"registry": "npmjs"
		}
	},
	"_attachments": {
		"chai-spies-1.0.0.tgz": {
			"shasum": "d16b39336fb316d03abf8c375feb23c0c8bb163d"
		}
	},
	"_rev": "2-38dcb9fffd4497e7",
	"_id": "chai-spies",
	"readme": "# Chai Spies\n\nThis is an addon plugin for the [chai](https://github.com/chaijs/chai) assertion library. It provides the\nmost basic function spy ability and tests.\n\nThis library is primarily meant to serve as a starting point for anyone interested in developing chai plugins. If\ndeveloping a module, you are welcome to use this as a starting point. I also encourage the use of the compile\ntools to allow modules to work both in node.js and the browser.\n\n## Installation\n\n#### Node.js\n\nChai spies are available on npm.\n\n      $ npm install chai-spies\n\n#### Browser\n\nInclude `chai-spies.js` after including `chai.js`.\n\n```xml\n<script src=\"chai-spies.js\"></script>\n```\n\n## Plug In\n\nIf you are using `chai-spies` in the browser, there is nothing you need to do. It will detect `chai` in the global\nnamespace and automatically get used.\n\nIf you are using node, here is a useful bit.\n\n```js\nconst chai = require('chai')\n  , spies = require('chai-spies');\n\nchai.use(spies);\n\nconst should = chai.should()\n  , expect = chai.expect;\n```\n\n## Building for the Browser\n\nCurrently this package uses [rollup](https://rollupjs.org/) to bundle source code. Just use `npm run build` to build browser version.\n\n## Chai Spies Api Reference\n\n### Creating Spies\n\nIn this module, a spy is either an empty function, or a wrapped named function.\nOnce chai has been extended, you can create a spy through chai's own interface.\n\n```js\nfunction original () {\n  // do something cool\n}\n\nconst spy = chai.spy(original);\n\n// then use in place of original\nee.on('some event', spy);\n\n// or use without original\nconst spyAgain = chai.spy();\nee.on('some other event', spyAgain);\n```\n\n#### spy.on\n\n`spy.on` allows to add spy on existing method of an object\n\n```js\nconst array = [1, 2, 3];\n\nchai.spy.on(array, 'push');\n\n// or multiple spies\nchai.spy.on(array, ['push', 'pop']);\n```\n\nIt's also possible to provide custom implementation of spied method:\n\n```js\nchai.spy.on(array, 'push', function (...items) {\n  // custom implementation of `push` method\n});\n```\n\nUsing arrow functions, it's also easy to replace method implementation with constant:\n\n```js\nchai.spy.on(array, 'push', () => 5);\n\n// or more readable :)\nchai.spy.on(array, 'push', returns => 5);\n```\n\n#### spy.interface\n\nThis method allows to create mock (or spy object), basically an interface with fake implementation or without implementation at all:\n\n```js\nconst eventBus = chai.spy.interface(['on', 'off', 'emit']);\n\n// with implementation\nconst arrayLike = chai.spy.interface({\n  push(item) {\n    this.__items = this.__items || [];\n    return this.__items.push(item)\n  },\n  // other methods\n});\n\narrayLike.push(5);\n```\n\n#### spy.returns (Deprecated)\n\n`chai.spy.returns` is just a simple helper which creates a function that returns constant:\n\n```js\nconst returnTrue = chai.spy.returns(true);\n\nreturnTrue(); // true\n```\n\nBetter to use arrow function:\n\n```js\nconst returnTrue = chai.spy(returns => true);\n```\n\n### Sandboxes\n\nSandbox is a set of spies. Sandbox allows to track methods on objects and restore original methods with on `restore` call.\nTo create sandbox:\n\n```js\nconst sandbox = chai.spy.sandbox();\n\ndescribe('Array', () => {\n  let array;\n\n  beforeEach(() => {\n    array = [];\n    sandbox.on(array, ['push', 'pop']);\n  });\n\n  afterEach(() => {\n    sandbox.restore(); // restores original methods on `array`\n  })\n\n  it('allows to add items', () => {\n    array.push(1);\n\n    expect(array.push).to.have.been.called.with(1);\n  });\n});\n```\n\n`chai.spy.on` and `chai.spy.restore` are bound to default sandbox.\nSo to restore all methods spied by `chai.spy.on`, just call `chai.spy.restore()` (without arguments).\n\n`restore` method accepts 2 optional arguments: object to restore and method or methods to restore. So, this calls are also valid:\n\n```js\nconst array = [1, 2, 3];\n\nchai.spy.on(array, ['push', 'pop']);\n\nchai.spy.restore(array) // restores all methods on object\nchai.spy.restore(array, 'push') // restores only `push` method\n```\n\n### Assertions\n\n#### .spy\n\nAsserts that object is a spy.\n\n```js\nexpect(spy).to.be.spy;\nspy.should.be.spy;\n```\n\n#### .called\n\nAssert that a spy has been called. Negation passes through.\n\n```js\nexpect(spy).to.have.been.called();\nspy.should.have.been.called();\n```\n\nNote that `called` can be used as a chainable method.\n\n#### .with\n\nAssert that a spy has been called with a given argument at least once,\neven if more arguments were provided.\n\n```js\nspy('foo');\nexpect(spy).to.have.been.called.with('foo');\nspy.should.have.been.called.with('foo');\n```\n\nWill also pass for `spy('foo', 'bar')` and `spy(); spy('foo')`.\n\nIf used with multiple arguments, assert that a spy has been called\nwith all the given arguments at least once.\n\n```js\nspy('foo', 'bar', 1);\nexpect(spy).to.have.been.called.with('bar', 'foo');\nspy.should.have.been.called.with('bar', 'foo');\n```\n\n#### .with.exactly\n\nSimilar to .with, but will pass only if the list of arguments is\nexactly the same as the one provided.\n\n```js\nspy();\nspy('foo', 'bar');\nexpect(spy).to.have.been.called.with.exactly('foo', 'bar');\nspy.should.have.been.called.with.exactly('foo', 'bar');\n```\n\nWill not pass for `spy('foo')`, `spy('bar')`, `spy('bar');\nspy('foo')`, `spy('foo'); spy('bar')`, `spy('bar', 'foo')` or\n`spy('foo', 'bar', 1)`.\n\nCan be used for calls with a single argument too.\n\n#### .always.with\n\nAssert that every time the spy has been called the argument list\ncontained the given arguments.\n\n```js\nspy('foo');\nspy('foo', 'bar');\nspy(1, 2, 'foo');\nexpect(spy).to.have.been.called.always.with('foo');\nspy.should.have.been.called.always.with('foo');\n```\n\n#### .always.with.exactly\n\nAssert that the spy has never been called with a different list of\narguments than the one provided.\n\n```js\nspy('foo');\nspy('foo');\nexpect(spy).to.have.been.called.always.with.exactly('foo');\nspy.should.have.been.called.always.with.exactly('foo');\n```\n\n#### .nth(n).called.with\n\nAsserts that the nth call of the spy has been made with the list of arguments provided. This assertion comes with other three flavors:\n\n* .first.called.with\n* .second.called.with\n* .third.called.with\n\n```js\nspy('foo');\nspy('bar');\nspy('baz');\nspy('foobar');\nexpect(spy).to.have.been.first.called.with('foo');\nspy.should.have.been.first.called.with('foo');\nexpect(spy).on.nth(5).be.called.with('foobar');\nspy.should.on.nth(5).be.called.with('foobar');\n```\n\nThese assertions requires the spy to be called at least the\nnumber of times required, for example\n\n```js\nspy('foo');\nspy('bar');\nexpect(spy).to.have.been.third.called.with('baz');\nspy.should.have.been.third.called.with('baz');\n```\n\nWon't pass because the spy has not been called a third time.\n\n#### .once\n\nAssert that a spy has been called exactly once.\n\n```js\nexpect(spy).to.have.been.called.once;\nexpect(spy).to.not.have.been.called.once;\nspy.should.have.been.called.once;\nspy.should.not.have.been.called.once;\n```\n\n#### .twice\n\nAssert that a spy has been called exactly twice.\n\n```js\nexpect(spy).to.have.been.called.twice;\nexpect(spy).to.not.have.been.called.twice;\nspy.should.have.been.called.twice;\nspy.should.not.have.been.called.twice;\n```\n\n#### .exactly(n)\n\nAssert that a spy has been called exactly `n` times.\n\n```js\nexpect(spy).to.have.been.called.exactly(3);\nexpect(spy).to.not.have.been.called.exactly(3);\nspy.should.have.been.called.exactly(3);\nspy.should.not.have.been.called.exactly(3);\n```\n\n#### .min(n) / .at.least(n)\n\nAssert that a spy has been called minimum of `n` times.\n\n```js\nexpect(spy).to.have.been.called.min(3);\nexpect(spy).to.not.have.been.called.at.least(3);\nspy.should.have.been.called.at.least(3);\nspy.should.not.have.been.called.min(3);\n```\n\n#### .max(n) / .at.most(n)\n\nAssert that a spy has been called maximum of `n` times.\n\n```js\nexpect(spy).to.have.been.called.max(3);\nexpect(spy).to.not.have.been.called.at.most(3);\nspy.should.have.been.called.at.most(3);\nspy.should.not.have.been.called.max(3);\n```\n#### .above(n) / .gt(n)\n\nAssert that a spy has been called more than `n` times.\n\n```js\nexpect(spy).to.have.been.called.above(3);\nexpect(spy).to.not.have.been.called.gt(3);\nspy.should.have.been.called.gt(3);\nspy.should.not.have.been.called.above(3);\n```\n\n#### .below(n) / .lt(n)\n\nAssert that a spy has been called fewer than `n` times.\n\n```js\nexpect(spy).to.have.been.called.below(3);\nexpect(spy).to.not.have.been.called.lt(3);\nspy.should.have.been.called.lt(3);\nspy.should.not.have.been.called.below(3);\n```\n\n## Tests\n\nTests are written using [mocha](http://github.com/visionmedia/mocha) in the BDD interface.\nNode tests can be executed using `npm test`. Browser tests can be seen by opening `test/browser/index.html`.\n\n## Contributors\n\n project  : chai-spies  \n repo age : 3 years, 2 months  \n active   : 26 days  \n commits  : 77  \n files    : 12  \n authors  :  \n    48  Jake Luer         62.3%  \n     7  Glenn Jorde       9.1%  \n     4  Keith Cirkel      5.2%  \n     3  =                 3.9%  \n     3  Sergiy Stotskiy   3.9%  \n     2  JamesMaroney      2.6%  \n     2  PG Herveou        2.6%  \n     2  Ryckes            2.6%  \n     1  Veselin Todorov   1.3%  \n     1  Steffen           1.3%  \n     1  Daniel Walker     1.3%  \n     1  Domenic Denicola  1.3%  \n     1  Andre Jaenisch    1.3%  \n     1  PG                1.3%  \n\n## License\n\n(The MIT License)\n\nCopyright (c) 2012 Jake Luer <jake@alogicalparadox.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
}