Rewireify is a port of Rewire for Browserify that adds setter and getter methods to each module so that their behaviour can be modified for better unit testing. With Rewireify you can:
- Inject mocks for other modules
- Leak private variables
- Override variables within the module
First install and save Rewireify into your project dependencies:
$ npm install rewireify --save-dev
Include the Rewireify transform as part of your Browserify test build:
$ browserify -e app.js -o test-bundle.js -t rewireify -s test-bundle
Rewireify can also ignore certain files with the --ignore
option and a filename. Multiple files can be excluded by separating them with commas:
$ browserify -e app.js -o test-bundle.js -t [ rewireify --ignore filename,second-filename ] -s test-bundle
Now you can inspect, modify and override your modules internals in your tests:
var bundle = require("./path/to/test-bundle");
// Private variables can be leaked...
subject.__get__("secretKey");
// ...or modified
subject.__set__("secretKey", 1234);
// Nested properties can be inspected or modified
subject.__set__("user.firstname", "Joe");
// Dependencies can be mocked...
subject.__set__("config", {
cache: false,
https: false
});
// ...or methods stubbed
subject.__set__("http.get", function(url, cb) {
cb("This method has been stubbed");
});
-
name
Name of the variable to get. The variable should be defined with var in the top-level scope of the module.
-
name
Name of the variable to set. The variable should be defined with var in the top-level scope of the module.
-
value
The value to set.
-
map
Takes all keys as variable names and sets their values respectively.