From 6b1361118d2db16f7e05c7a707d356321ff0cbaf Mon Sep 17 00:00:00 2001 From: Offirmo Date: Tue, 12 Jun 2018 21:09:08 +1000 Subject: [PATCH] activate dirty-chai --- README.md | 55 ++++++++++++++++++++--------------------- mocha-chai-init-node.js | 19 ++++++++------ package.json | 1 + 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 4640c3e..dae3ac1 100755 --- a/README.md +++ b/README.md @@ -1,10 +1,27 @@ # unit-test-toolbox -A convenient aggregation of quality npm modules to be used for writing unit tests. Just install this module and you get everything needed at once! - -This modules includes `mocha`, `chai`, `sinon`, `sinon-chai`, `chai-as-promised`, `chai-subset`, `chai-moment`. +A convenient aggregation of quality npm modules to be used for writing unit tests. +Just install this module and you get everything needed at once! + +**v4 important note, breaking change:** +* As we strive to write solid unit tests, v4 now includes and activates [`dirty-chai`](https://github.com/prodatakey/dirty-chai) +* dropped legacy node compatibility (<2) may still work but didn't try and won't maintain. + + +This modules bundles: +* `mocha` +* `chai` +* `dirty-chai` +* `sinon` +* `sinon-chai` +* `chai-as-promised` +* `chai-subset` +* `chai-moment` It also exposes: -- a pre-made plumbing activating the `chai.expect` interface, chai `sinon-chai` and `chai-as-promised` plugins -- (for legacy nodes with npm <= 2) the `mocha` executable as a redirection to its integrated `mocha` executable +- a pre-made plumbing for: + - activating the `chai.expect` interface + - activating correctly the chai alteration `dirty-chai` **[READ THIS](https://github.com/prodatakey/dirty-chai#use-with-chai-as-promised)** + - activating correctly the chai plugins: `sinon-chai`, `chai-as-promised`, `chai-subset`, `chai-moment` +- a pre-made mocha options file **In progress**: - working on integrating sinon properly @@ -16,7 +33,7 @@ Writing unit tests in JavaScript with mocha/chai requires assembling a bunch of **:-1: WITHOUT @offirmo/unit-test-toolbox :-1: :hurtrealbad:**: 1. remembering all the libs needed -1. installing them: `npm install mocha chai sinon sinon-chai chai-as-promised` +1. installing them: `npm install mocha chai sinon sinon-chai chai-as-promised chai-subset chai-moment` 1. if using typescript: `npm install @types/mocha @types/chai @types/sinon @types/sinon-chai @types/chai-as-promised` 1. write an init file for activating `chai.expect` (what else ?), `sinon-chai` and `chai-as-promised` 1. write the npm task `"test": "mocha --opts mocha.opts path/to/init.js ''"` @@ -26,7 +43,7 @@ The proposed solution: **:+1: WITH @offirmo/unit-test-toolbox :+1: :sunglasses:**: 1. install only one module `npm i -D @offirmo/unit-test-toolbox` -1. write the npm task `"test": "mocha --opts mocha.opts node_modules/@offirmo/unit-test-toolbox/mocha-chai-init-node.js ''"` +1. copy this npm task `"test": "mocha --opts mocha.opts node_modules/@offirmo/unit-test-toolbox/mocha-chai-init-node.js ''"` 1. keep @offirmo/unit-test-toolbox up-to-date @@ -46,27 +63,6 @@ If you want to use the pre-written init file, reference it in your `test` task: }, ``` -Suggested `mocha.opts`: -``` ---reporter spec ---check-leaks ---es_staging ---full-trace ---harmony -``` - -### Legacy -For node 0.10 with npm 2, reference a special branch in `package.json` -``` -"@offirmo/unit-test-toolbox": "git://github.com/offirmo/unit-test-toolbox.git#legacy-node_v0.10", -``` -You can then use `mocha` as usual (transparently forwarded). - -`sinon` should be imported through unit-test-toolbox: -```js -var sinon = require('@offirmo/unit-test-toolbox/node_modules/sinon') -``` - ## See also * mocha @@ -80,3 +76,6 @@ var sinon = require('@offirmo/unit-test-toolbox/node_modules/sinon') ## Contributing Suggestions welcome. +TODO +* https://github.com/prodatakey/dirty-chai +* https://github.com/prodatakey/dirty-chai/issues/12 diff --git a/mocha-chai-init-node.js b/mocha-chai-init-node.js index 19ec239..bad9240 100755 --- a/mocha-chai-init-node.js +++ b/mocha-chai-init-node.js @@ -1,12 +1,13 @@ "use strict"; -var Mocha = require('mocha') -var sinon = require('sinon') -var chai = require('chai') -var sinon_chai = require('sinon-chai') -var chai_as_promised = require('chai-as-promised') -var chai_subset = require('chai-subset') -var chai_moment = require('chai-moment') +const Mocha = require('mocha') +const sinon = require('sinon') +const chai = require('chai') +const dirty_chai = require("dirty-chai") +const chai_as_promised = require('chai-as-promised') +const sinon_chai = require('sinon-chai') +const chai_subset = require('chai-subset') +const chai_moment = require('chai-moment') // expose some global variables as convenience @@ -14,8 +15,10 @@ global.expect = chai.expect global.sinon = sinon // activate chai extensions -chai.use(sinon_chai) +// order is important: https://github.com/prodatakey/dirty-chai#use-with-chai-as-promised chai.use(chai_as_promised) +chai.use(dirty_chai) +chai.use(sinon_chai) chai.use(chai_subset) chai.use(chai_moment) diff --git a/package.json b/package.json index 4d10278..15e1bc3 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "chai-as-promised": "^7", "chai-moment": "^0.1", "chai-subset": "^1", + "dirty-chai": "^2.0.1", "mocha": "^4", "sinon": "^4", "sinon-chai": "^2"