https://github.com/robertklep/node-monkeypatch
Slightly easier monkeypatching
https://github.com/robertklep/node-monkeypatch
Last synced: 5 months ago
JSON representation
Slightly easier monkeypatching
- Host: GitHub
- URL: https://github.com/robertklep/node-monkeypatch
- Owner: robertklep
- Created: 2015-05-18T08:44:20.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2015-05-18T10:30:33.000Z (about 11 years ago)
- Last Synced: 2025-10-05T08:37:30.571Z (10 months ago)
- Language: JavaScript
- Size: 121 KB
- Stars: 22
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## node-monkeypatch [](https://travis-ci.org/robertklep/node-monkeypatch)
Slightly easier monkeypatching.
### Installation
```
npm install monkeypatch
```
### Usage
```javascript
monkeypatch(target : Object, method : String, handler : Function) : Function
```
Monkeypatching a method/function on a target object replaces the method with a newly supplied handler function which will get called instead of the original.
The original method will be returned by `monkeypatch()`, and will also be passed as the first argument to the new handler function. See examples.
### Examples
##### Patching a function
```javascript
var monkeypatch = require('monkeypatch');
// Monkeypatch Date.now()
monkeypatch(Date, 'now', function(original) {
// Round to 15-minute interval.
var ts = original();
return ts - (ts % 900000);
});
var timestamp = Date.now(); // returns a rounded timestamp
...
```
##### Patching an instance method
```javascript
var monkeypatch = require('monkeypatch');
// Monkeypatch Date#getTime()
monkeypatch(Date.prototype, 'getTime', function(original) {
// Round to 15-minute interval.
var ts = original();
return ts - (ts % 900000);
});
var date = new Date();
var timestamp = date.getTime(); // returns a rounded timestamp
...
```
##### Argument handling
```javascript
var monkeypatch = require('monkeypatch');
// Monkeypatch Date#setTime()
monkeypatch(Date.prototype, 'setTime', function(original, ts) {
// Round to 15-minute interval.
ts = ts - (ts % 900000);
// Call the original.
return original(ts);
});
var date = new Date();
date.setTime(date.getTime()); // set to a rounded timestamp
...
```
##### Unpatching
```javascript
var monkeypatch = require('monkeypatch');
// Monkeypatch Date.now()
monkeypatch(Date, 'now', function() { return 143942400000; });
console.log(Date.now()); // logs 143942400000
Date.now.unpatch();
console.log(Date.now()); // logs current time
```