UNPKG

mongoose_record_replay

Version:

readonly mongoose drop in for testing (replaying w.o. mongo db) and recording (running against mongodb)

117 lines (70 loc) 3.16 kB
# mongoose_record_replay [![Build Status](https://travis-ci.org/jfseb/mongoose_record_replay.svg?branch=master)](https://travis-ci.org/jfseb/mgnlq_model)[![Coverage Status](https://coveralls.io/repos/github/jfseb/mgnlq_model/badge.svg)](https://coveralls.io/github/jfseb/mongoose_record_replay) readonly mongoose drop in for testing ( and recording test data ) Allows to record query results, #usage ```javascript var mongoose = require('mongoose_record_replay').instrumentMongoose(require('mongoose')); ``` ##extended usage: Behaviour can be set by environment variables ( see below) or explicitly via paramter: ```javascript var mode = 'REPLAY'; if (process.env.MYSWITCH) { mode = 'RECORD'; } var mongoose = require('mongoose_record_replay').instrumentMongoose(require('mongoose'), 'node_modules/mgnlq_testmodel_replay/mgrecrep/', mode); ``` var mongoose = require('mongoose_record_replay').instrumentMongoose(require('mongoose')); ``` currently supported methods: 1. <Model>.find().lean().exec().then (...)# 2. <Model>.aggregate().then( ... ) 3. <Model>.distinct( ).then( ... ) # Modes The operational mode is controlled by the environment variable ``MONGO_RECORD_REPLAY`` ## Original mongoose ## Replaying (``set MONGO_RECORD_REPLAY=REPLAY``) Connection establishing is suppressed! operation <Model>.find, <Model>.aggregate, <Model>.distinct return there recorded result ( if found ) or an ENOENT message on the file (set debug=mongoose_rec* ) to get more infomration ## Recording (``set MONGO_RECORD_REPLAY=RECORD``) Queries are executed against mongoose, 1. query input * ``<modelname>``, * `<operation> (e.g. `find, aggregate, distinct`), * `<query/pipeline>` argumetns are recorded ) and 2. Result is recorded and stored. ## Recording location On recording, files are created in (default locattion "mgrecrep/", can be controlled ) 1. mgrecrep/queries.json List of queries recorded could be used to refire them and update with new data. (=> nice feature) 2. mgrecrep/data/<uniqueid> The default folder can be changed via environment variables ``MONGO_RECORD_REPLAY_PATH``: The variable value shall end with a terminating '/' ! 1. default mgrecrep 2. Environment variable ``MONGO_RECORD_REPLAY_FOLDER``, e.g. ``` process.env.MONGO_RECORD_REPLAY_FOLDER= mgrecrep/ set MONGO_RECORD_REPLOAY_FOLDER=mypath/myfolder/ export MONGO_RECORD_REPLAY_FOLRDER mypath/myfolder/ ``` 3. explicit path as 2nd argument to ``intrumentMongoose`` ```javascript const recordFolder = './myfolder/'; var mongoose = require('mongoose_record_replay').instrumentMongoose(require('mongoose'), recordFolder); ``` # Caveats / Known issues 1. Beware: JSON serialization destroys differences between null and undefined etc. 2. Currently returning full model documents is not supported, only the lean().exec promise chain # Extends feel free to record issue and provide pull request