From ecf0e776b8374f31785d68932cb4ac51412b7c4f Mon Sep 17 00:00:00 2001 From: Taka Okunishi Date: Sat, 14 May 2016 18:47:26 +0900 Subject: [PATCH] Upgrade node engine --- .README.md.bud | 33 ++-- .travis.yml | 11 +- README.md | 112 +----------- ci/build.js | 18 +- ci/cover.js | 21 +-- ci/release.js | 24 ++- ci/report.js | 14 +- ci/test.js | 14 +- ci/update.js | 12 +- .../guides}/01.Installation.md.hbs | 0 doc/guides/02.Usage.md.hbs | 15 ++ .../readme => doc/guides}/03.Examples.md.hbs | 2 +- {docs/readme => doc/guides}/04.API.md.hbs | 0 docs/examples/example-nodeunit.js | 26 --- docs/readme/02.Usage.md.hbs | 15 -- example/example-nodeunit.js | 29 ++++ injectmock.js | 159 +++++++++--------- injectmock_test.js | 50 +++--- package.json | 34 ++-- 19 files changed, 240 insertions(+), 349 deletions(-) rename {docs/readme => doc/guides}/01.Installation.md.hbs (100%) create mode 100644 doc/guides/02.Usage.md.hbs rename {docs/readme => doc/guides}/03.Examples.md.hbs (62%) rename {docs/readme => doc/guides}/04.API.md.hbs (100%) delete mode 100644 docs/examples/example-nodeunit.js delete mode 100644 docs/readme/02.Usage.md.hbs create mode 100644 example/example-nodeunit.js diff --git a/.README.md.bud b/.README.md.bud index 228cb0f..355e0c2 100644 --- a/.README.md.bud +++ b/.README.md.bud @@ -2,25 +2,26 @@ * Bud file for README.md */ -"use strict"; +'use strict' -var apeTmpl = require('ape-tmpl'), - pkg = require('./package.json'); +const apeTmpl = require('ape-tmpl'); +const pkg = require('./package.json') module.exports = apeTmpl.readmeMdBud({ - pkg: pkg, - repo: 'okunishinishi/node-' + pkg.name, - sections: 'docs/readme/*.md.hbs', - badges: { - travis: true, - codeclimate: true, - codeclimateCoverage: true, - gemnasium: false, - npm: true - }, - links: null -}); + pkg: pkg, + repo: pkg.repository, + sections: 'docs/guides/*.md.hbs', + badges: { + travis: true, + codeclimate: true, + codeclimateCoverage: true, + gemnasium: false, + npm: true, + standard: true + }, + links: null +}) if (!module.parent) { - require('coz').render(__filename); + require('coz').render(__filename) } \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index a0b02b9..39a5137 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,14 @@ language: node_js node_js: -- '0.11' +- '6' before_install: +- npm install mocha istanbul -g install: - npm install -before_script: -- npm link . script: -- npm run test -- npm run cover -- npm run report +- ./ci/test.js +- ./ci/cover.js +- ./ci/report.js env: global: - secure: G9E09sbh0+ZqhMRgJC9MuTOUN7/SwnWQPlRBVdx1RW4FmP6bWQGEmWLxJFwXjeM8JZhmue98oYMxVHHYoWwqPYypEsdO9hE8tenjAkpKChgiEGFheHpEPPDNTRhARBGJXSil1SQMlnflOWTbY7czAeGj0DOGRpA/jis3zNTO3ks1T8ZdfTVmfXzt1v+4Xmz3ipGCqj9C9ksPhjP2Sv+anR6Y6exbDYFC7QmnNBqspu6RPGP8nBsdbtAkNQLssNoD9MsM8+9h3+UC1tejwGdgfSj8oDfSch0qnfI81Yk4M67AXBcYg/buhVZABVln3dPxFishfY4qK4x7PAAtJR3ME04meke6gn5BmOUuehmerP6MCAtzWfwBWG2hIsb3masmlNJZdDBtsTs6L415Xrb5DvimIAHAgoBsN2XDLgO0o2Cx5CY5JcDYg29YwGsLr6kshD7cBlHSySca9tYdVGuxeLJxUtuTrPQD0NVPl7jf/IWZ3PA3qEGIGbFdXFCl+Q2yWcxOYpqb2+06mfY7yeWUHdIsEi/7feTL7ri1yXPb1ZIE+DgA2SpDOjj/0Zwfh45EU3CqxOsGTBUzwKGQOW/eloMUWcJ6KNUnW4uh+qbOqMRUJf6mW86RUo1XLlUaFaBamFs5lbTXuheaCCMbFBa/LqX/mqO5aOZp2UYVUyGLNt8= diff --git a/README.md b/README.md index f9e9d67..7857914 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ injectmock ========== + + @@ -8,6 +12,7 @@ injectmock [![Code Climate][bd_codeclimate_shield_url]][bd_codeclimate_url] [![Code Coverage][bd_codeclimate_coverage_shield_url]][bd_codeclimate_url] [![npm Version][bd_npm_shield_url]][bd_npm_url] +[![JS Standard][bd_standard_shield_url]][bd_standard_url] [bd_repo_url]: https://github.com/okunishinishi/node-injectmock [bd_travis_url]: http://travis-ci.org/okunishinishi/node-injectmock @@ -20,6 +25,8 @@ injectmock [bd_gemnasium_shield_url]: https://gemnasium.com/okunishinishi/node-injectmock.svg [bd_npm_url]: http://www.npmjs.org/package/injectmock [bd_npm_shield_url]: http://img.shields.io/npm/v/injectmock.svg?style=flat +[bd_standard_url]: http://standardjs.com/ +[bd_standard_shield_url]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg @@ -37,111 +44,6 @@ Inject mock and restore original for javascript property. Useful for unit testi - - - -Installation ------ - -```bash -npm install injectmock --save-dev -``` - - - - - - -Usage ----- - -Injecting mock: - -```javascript -var injectmock = require('injectmock'); -injectmock(myModule, 'myFunction', myMockFunction); -``` - -Restoring Original: - -```javascript -injectmock.restoreAll(); -``` - - - - - - -Examples ------ - -Work with nodeunit setUp/tearDown method: - -```javascript -/** - * This an example inject mock for nodeunit test. - */ - -var injectmock = require('injectmock'); - -// Disable console.log before test started. -exports.setUp = function (done) { - function mockLog() { - } - - // Inject `mockLog` as `console.log`. - injectmock(console, 'log', mockLog); - - done(); -}; - -// Disable console.log before test done. -exports.tearDown = function (done) { - // Restore all injected. - injectmock.restoreAll(); - - console.log('Now I am back!'); - - done(); -}; - -``` - - - - - - -API Guide ------ - -#### `injectmock(module, key, value)` - -Inject a mock to module. - - -#### `injectmock.restore(module, key)` - -Restore an injected. - - -#### `injectmock.restoreAll()` - -Restore all injected. - - -#### `injectmock.new()` - -Returns a new `injectmock` context, which has separated mock stacks. - - -#### `injectmock.noop()` - -Do nothing. You can use this method as mock to do nothing. - - - diff --git a/ci/build.js b/ci/build.js index 978820b..6877a21 100755 --- a/ci/build.js +++ b/ci/build.js @@ -4,18 +4,16 @@ * Build this project. */ -"use strict"; +'use strict' -process.chdir(__dirname + '/..'); +process.chdir(`${__dirname}/..`) -var apeTasking = require('ape-tasking'), - coz = require('coz'); +const apeTasking = require('ape-tasking') +const coz = require('coz') apeTasking.runTasks('build', [ - function (callback) { - coz.render([ - '.*.bud' - ], callback); - } -], true); + () => coz.render([ + '.*.bud' + ]) +], true) diff --git a/ci/cover.js b/ci/cover.js index c06addb..76b483d 100755 --- a/ci/cover.js +++ b/ci/cover.js @@ -4,19 +4,16 @@ * Run coverage. */ -"use strict"; +'use strict' -process.chdir(__dirname + '/..'); +process.chdir(`${__dirname}/..`) -var apeTasking = require('ape-tasking'), - apeCovering = require('ape-covering'); +const apeTasking = require('ape-tasking') +const apeCovering = require('ape-covering') apeTasking.runTasks('cover', [ - function (callback) { - apeCovering.measureCoverage( - require.resolve('./test.js'), [], { - dir: 'coverage' - }, callback - ); - } -], true); \ No newline at end of file + () => apeCovering.measureCoverage( + '_mocha', [ '*_test.js' ], { + dir: 'coverage' + }) +], true) diff --git a/ci/release.js b/ci/release.js index a93fb9c..5718849 100755 --- a/ci/release.js +++ b/ci/release.js @@ -4,20 +4,18 @@ * Release this package. */ -"use strict"; +'use strict' -process.chdir(__dirname + '/..'); +process.chdir(`${__dirname}/..`) -var apeTasking = require('ape-tasking'), - apeReleasing = require('ape-releasing'); +const apeTasking = require('ape-tasking') +const apeReleasing = require('ape-releasing') apeTasking.runTasks('release', [ - function (callback) { - apeReleasing.releasePackage({ - beforeRelease: [ - 'ci/build.js', - 'ci/test.js' - ] - }, callback); - } -], true); \ No newline at end of file + () => apeReleasing.releasePackage({ + beforeRelease: [ + 'ci/build.js', + 'ci/test.js' + ] + }) +], true) diff --git a/ci/report.js b/ci/report.js index f829ad8..7446ebf 100755 --- a/ci/report.js +++ b/ci/report.js @@ -4,15 +4,13 @@ * Run report */ -"use strict"; +'use strict' -process.chdir(__dirname + '/..'); +process.chdir(`${__dirname}/..`) -var apeTasking = require('ape-tasking'), - apeReporting = require('ape-reporting'); +const apeTasking = require('ape-tasking') +const apeReporting = require('ape-reporting'); apeTasking.runTasks([ - function (callback) { - apeReporting.sendToCodeclimate('coverage/lcov.info', callback); - } -], true); + () => apeReporting.sendToCodeclimate('coverage/lcov.info') +], true) diff --git a/ci/test.js b/ci/test.js index c6c92b9..e98726b 100755 --- a/ci/test.js +++ b/ci/test.js @@ -4,15 +4,13 @@ * Run test */ -"use strict"; +'use strict' -process.chdir(__dirname + '/..'); +process.chdir(`${__dirname}/..`) -var apeTasking = require('ape-tasking'), - apeTesting = require('ape-testing'); +const apeTasking = require('ape-tasking') +const apeTesting = require('ape-testing') apeTasking.runTasks('test', [ - function (callback) { - apeTesting.runNodeunit('*_test.js', callback); - } -], true); \ No newline at end of file + () => apeTesting.runMocha('*_test.js', {}) +], true) diff --git a/ci/update.js b/ci/update.js index e49c51f..164ef65 100755 --- a/ci/update.js +++ b/ci/update.js @@ -4,15 +4,15 @@ * Update project. */ -"use strict"; +'use strict' -process.chdir(__dirname + '/..'); +process.chdir(`${__dirname}/..`) -var apeTasking = require('ape-tasking'), - apeUpdating = require('ape-updating'); +const apeTasking = require('ape-tasking'), + apeUpdating = require('ape-updating') apeTasking.runTasks('update', [ function renderBud(callback) { - apeUpdating.updateDependencies({}, callback); + apeUpdating.updateDependencies({}, callback) } -], true); +], true) diff --git a/docs/readme/01.Installation.md.hbs b/doc/guides/01.Installation.md.hbs similarity index 100% rename from docs/readme/01.Installation.md.hbs rename to doc/guides/01.Installation.md.hbs diff --git a/doc/guides/02.Usage.md.hbs b/doc/guides/02.Usage.md.hbs new file mode 100644 index 0000000..09ec065 --- /dev/null +++ b/doc/guides/02.Usage.md.hbs @@ -0,0 +1,15 @@ +Usage +---- + +Injecting mock: + +```javascript +const injectmock = require('injectmock') +injectmock(myModule, 'myFunction', myMockFunction) +``` + +Restoring Original: + +```javascript +injectmock.restoreAll() +``` diff --git a/docs/readme/03.Examples.md.hbs b/doc/guides/03.Examples.md.hbs similarity index 62% rename from docs/readme/03.Examples.md.hbs rename to doc/guides/03.Examples.md.hbs index c769c7d..8b4e96e 100644 --- a/docs/readme/03.Examples.md.hbs +++ b/doc/guides/03.Examples.md.hbs @@ -4,5 +4,5 @@ Examples Work with nodeunit setUp/tearDown method: ```javascript -{{{read 'docs/examples/example-nodeunit.js'}}} +{{{read 'example/example-nodeunit.js'}}} ``` diff --git a/docs/readme/04.API.md.hbs b/doc/guides/04.API.md.hbs similarity index 100% rename from docs/readme/04.API.md.hbs rename to doc/guides/04.API.md.hbs diff --git a/docs/examples/example-nodeunit.js b/docs/examples/example-nodeunit.js deleted file mode 100644 index 27f393a..0000000 --- a/docs/examples/example-nodeunit.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This an example inject mock for nodeunit test. - */ - -var injectmock = require('injectmock'); - -// Disable console.log before test started. -exports.setUp = function (done) { - function mockLog() { - } - - // Inject `mockLog` as `console.log`. - injectmock(console, 'log', mockLog); - - done(); -}; - -// Disable console.log before test done. -exports.tearDown = function (done) { - // Restore all injected. - injectmock.restoreAll(); - - console.log('Now I am back!'); - - done(); -}; diff --git a/docs/readme/02.Usage.md.hbs b/docs/readme/02.Usage.md.hbs deleted file mode 100644 index 6a4cdf7..0000000 --- a/docs/readme/02.Usage.md.hbs +++ /dev/null @@ -1,15 +0,0 @@ -Usage ----- - -Injecting mock: - -```javascript -var injectmock = require('injectmock'); -injectmock(myModule, 'myFunction', myMockFunction); -``` - -Restoring Original: - -```javascript -injectmock.restoreAll(); -``` diff --git a/example/example-nodeunit.js b/example/example-nodeunit.js new file mode 100644 index 0000000..17fed38 --- /dev/null +++ b/example/example-nodeunit.js @@ -0,0 +1,29 @@ +/** + * This an example inject mock for mocha test. + */ +'use strict' + +const injectmock = require('injectmock') + +describe('My test', function () { + // Disable console.log before test started. + before((done) => { + function mockLog () { + } + + // Inject `mockLog` as `console.log`. + injectmock(console, 'log', mockLog) + done() + }) + + // Disable console.log before test done. + after((done) => { + // Restore all injected. + injectmock.restoreAll() + + console.log('Now I am back!') + done() + }) +}) + +/* global describe, before, after */ diff --git a/injectmock.js b/injectmock.js index b6a0f7b..64a5364 100644 --- a/injectmock.js +++ b/injectmock.js @@ -1,6 +1,6 @@ /** * Inject mock property to object(or module). - * Useful to inject mock on unittest and restore safely after done. + * Useful to inject mock on unit test and restore safely after done. * @function injectmock * @param {object} module - Module to injected. * @param {string} key - Injection key. @@ -21,8 +21,7 @@ * @function */ -"use strict"; - +'use strict' /** * Inject mock functions to node modules. @@ -30,86 +29,86 @@ * @inner * @constructor Injector */ -function Injector() { - var s = this; - s.injections = []; +function Injector () { + const s = this + s.injections = [] } Injector.prototype = { - /** - * Inject a mock to a module. - * @param {object} module - Module to injected. - * @param {string} key - Injection key. - * @param {*} value - Value to inject. - * @returns {*} - Returns self. - */ - inject: function (module, key, value) { - var s = this; - s.injections.unshift({ - module: module, - key: key, - delete: !module.hasOwnProperty(key), - origin: module[key], - value: value - }); - module[key] = value; - return s; - }, - /** - * Restore injected. - * @param {object} module - Module to injected. - * @param {string} key - Injection key. - * @returns {*} - Returns self. - */ - restore: function (module, key) { - var s = this; - var index = s._indexOfInjection(module, key); - var injection = s.injections[index]; - if (injection) { - if (injection.delete) { - delete module[key]; - } else { - module[key] = injection.origin; - } - s.injections.splice(index, 1); - } else { - // Do nothing. - } - return s; - }, - /** - * Restore all injected. - * @returns {*} - Returns self. - */ - restoreAll: function () { - var s = this; - while (s.injections.length) { - var injection = s.injections[0]; - s.restore(injection.module, injection.key); - } - return s; - }, - _indexOfInjection: function (module, key) { - var s = this; - for (var i = 0, len = s.injections.length; i < len; i++) { - var injection = s.injections[i], - hit = (injection.key === key) && (injection.module === module); - if (hit) { - return i; - } - } - return -1; + /** + * Inject a mock to a module. + * @param {object} module - Module to injected. + * @param {string} key - Injection key. + * @param {*} value - Value to inject. + * @returns {*} - Returns self. + */ + inject (module, key, value) { + const s = this + s.injections.unshift({ + module: module, + key: key, + delete: !module.hasOwnProperty(key), + origin: module[ key ], + value: value + }) + module[ key ] = value + return s + }, + /** + * Restore injected. + * @param {object} module - Module to injected. + * @param {string} key - Injection key. + * @returns {*} - Returns self. + */ + restore (module, key) { + const s = this + var index = s._indexOfInjection(module, key) + var injection = s.injections[ index ] + if (injection) { + if (injection.delete) { + delete module[ key ] + } else { + module[ key ] = injection.origin + } + s.injections.splice(index, 1) + } else { + // Do nothing. + } + return s + }, + /** + * Restore all injected. + * @returns {*} - Returns self. + */ + restoreAll () { + const s = this + while (s.injections.length) { + var injection = s.injections[ 0 ] + s.restore(injection.module, injection.key) + } + return s + }, + _indexOfInjection (module, key) { + const s = this + for (var i = 0, len = s.injections.length; i < len; i++) { + let injection = s.injections[ i ] + let hit = (injection.key === key) && (injection.module === module) + if (hit) { + return i + } } -}; + return -1 + } +} -function context() { - var injector = new Injector(); - var inject = injector.inject.bind(injector); - inject.restore = injector.restore.bind(injector); - inject.restoreAll = injector.restoreAll.bind(injector); - return inject; +function context () { + var injector = new Injector() + var inject = injector.inject.bind(injector) + inject.restore = injector.restore.bind(injector) + inject.restoreAll = injector.restoreAll.bind(injector) + return inject } -var injectmock = context(); +var injectmock = context() /** * Create new injectmock context. @@ -117,12 +116,12 @@ var injectmock = context(); * @function * @returns {injectmock} - New injectmock context. */ -injectmock.new = context; +injectmock.new = context /** * Do nothing. */ injectmock.noop = function () { -}; +} -module.exports = injectmock; \ No newline at end of file +module.exports = injectmock diff --git a/injectmock_test.js b/injectmock_test.js index 5e08cfb..5b3251c 100644 --- a/injectmock_test.js +++ b/injectmock_test.js @@ -1,36 +1,36 @@ /** * Test for injectmock. - * Runs with nodeunit. + * Runs with mocha. */ +'use strict' -"use strict"; +const injectmock = require('./injectmock') +const assert = require('assert') -var injectmock = require('./injectmock'); - - -exports['Inject and restore.'] = function (test) { - var mockObj = { - foo: 'bar' +describe('injectmock', function () { + it('Inject and restore.', () => { + let mockObj = { + foo: 'bar' }, mockObj2 = { - baz: 'quz' - }; - injectmock(mockObj, 'foo', 'bar2'); - - test.equal(mockObj.foo, 'bar2'); - injectmock(mockObj, 'foo', 'bar3'); - test.equal(mockObj.foo, 'bar3'); - injectmock.restore(mockObj, 'foo'); - test.equal(mockObj.foo, 'bar2'); + baz: 'quz' + } + injectmock(mockObj, 'foo', 'bar2') - injectmock(mockObj2, 'quzz', 'bar2'); - test.equal(mockObj2.quzz, 'bar2'); + assert.equal(mockObj.foo, 'bar2') + injectmock(mockObj, 'foo', 'bar3') + assert.equal(mockObj.foo, 'bar3') + injectmock.restore(mockObj, 'foo') + assert.equal(mockObj.foo, 'bar2') - injectmock.restoreAll(); - test.ok(!mockObj2.hasOwnProperty('quzz')); - test.equal(mockObj.foo, 'bar'); + injectmock(mockObj2, 'quzz', 'bar2') + assert.equal(mockObj2.quzz, 'bar2') - injectmock.restore(mockObj, '__invalid__'); + injectmock.restoreAll() + assert.ok(!mockObj2.hasOwnProperty('quzz')) + assert.equal(mockObj.foo, 'bar') + injectmock.restore(mockObj, '__invalid__') + }) +}) - test.done(); -}; \ No newline at end of file +/* global describe, it */ diff --git a/package.json b/package.json index 813fdb7..ce0b823 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,12 @@ { "name": "injectmock", - "version": "1.1.4", + "version": "2.0.0", "description": "Inject mock and restore original for javascript property. Useful for unit testing.", "main": "injectmock.js", "scripts": { - "build": "./ci/build.js", - "test": "./ci/test.js", - "cover": "./ci/cover.js", - "report": "./ci/report.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/okunishinishi/node-injectmock.git" + "test": "./ci/test.js" }, + "repository": "okunishinishi/node-injectmock", "keywords": [ "test", "mock", @@ -28,15 +22,19 @@ "url": "https://github.com/okunishinishi/node-injectmock/issues" }, "homepage": "https://github.com/okunishinishi/node-injectmock#readme", + "dependencies": {}, "devDependencies": { - "ape-covering": "^1.0.8", - "ape-releasing": "^1.0.14", - "ape-reporting": "^1.0.8", - "ape-tasking": "^1.0.6", - "ape-testing": "^1.3.2", - "ape-tmpl": "^1.0.9", - "ape-updating": "^1.0.1", - "coz": "^3.0.13" + "ape-covering": "^3.0.1", + "ape-releasing": "^3.1.1", + "ape-reporting": "^3.0.1", + "ape-tasking": "^3.1.2", + "ape-testing": "^3.0.1", + "ape-tmpl": "^5.0.1", + "ape-updating": "^3.0.2", + "coz": "^5.1.5" }, - "dependencies": {} + "engines": { + "node": ">=6", + "npm": ">=3" + } } \ No newline at end of file