https://github.com/axtgr/denude
👀 Expose the private parts of node modules
https://github.com/axtgr/denude
Last synced: 9 months ago
JSON representation
👀 Expose the private parts of node modules
- Host: GitHub
- URL: https://github.com/axtgr/denude
- Owner: axtgr
- License: isc
- Created: 2017-06-21T15:24:23.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-07-01T22:40:48.000Z (almost 9 years ago)
- Last Synced: 2025-08-09T04:33:34.957Z (10 months ago)
- Language: JavaScript
- Homepage:
- Size: 65.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# denude 
*All that is hidden shall be revealed*
Although testing private members is considered an antipattern, sometimes you really, *really* need to. Denude makes it easy to require functions and variables from the top scope of a module.
## Usage
Module you want to test:
```js
const { format } = require('util')
let prefix = 'Hello, '
function greet(name) {
return format(`${prefix}%s!`, name)
}
function helloWorld() {
return greet('World')
}
module.exports = { greet, helloWorld }
```
Test file:
```js
const denude = require('denude')
const { helloWorld, greet: publicGreet } = denude('./module') // public parts
const { format, prefix, greet } = denude('./module?private') // private parts
console.log(greet === publicGreet) // true
console.log(helloWorld()) // Hello, World!
```
Notice that denude works independently from require. It means that `require('./module')` and `denude('./module')` will return different instances of all the members of the module:
```js
const required = require('./module')
const publicDenude = denude('./module')
const privateDenude = denude('./module?private')
console.log(required.greet === publicDenude.greet) // false
console.log(privateDenude.greet === publicDenude.greet) // true
```
### Overriding require
You can use `require('denude/register')` to patch the native require globally. After that, any require that is passed a path with the `?private` prefix will return the private members instead of the exports.
Example:
```js
require('denude/register')
const helloWorld = require('./module') // public parts
const { format, prefix, greet } = require('./module?private') // private parts
```
This technique is useful with testing frameworks like [mocha](https://github.com/mochajs/mocha) and [ava](https://github.com/avajs/ava) that allow requiring modules on run:
```shell
mocha --require denude/register test
```
## License
[ISC](LICENSE)