mock-reduce

0.1.0 • Public • Published

Build Status

MockReduce

A mock for mongodbs/mongoose's mapReduce in order to achieve testability

Installation

npm install mock-reduce

Usage

var mockReduce = require('mock-reduce');

So far I have only tested implementations with node for jasmine. Generally it should work with any other testing framework.

Using MockReduce with mongoose

var mongoose = require('mongoose');
var mockReduce = require('mock-reduce');
 
describe('Mongoose Test', function() {
    it('runs a mock reduce and returns the expected data', function() {
        var testData = [
            {"someId": 42, "someString": "Chickens don't clap!", "value": 4},
            {"someId": 5, "someString": "I'm on the job.", "value": 5},
            {"someId": 42, "someString": "Annyong", "value": 8},
            {"someId": 5, "someString": "Come on, this is a Bluth family celebration.", "value": 5}
        ];
        
        var reducedData = [
            {"_id": 5, value: 10},
            {"_id": 42, value: 12}
        ];
        
        mockReduce.install(mongoose);
        mockReduce.setNextTestData(testData);
        var model = require('./models/myModel');
        var result = model.someMethodThatCallsMapReduce();
        expect(result).toEqual(reducedData);
        mockReduce.uninstall();
    });
});

See file spec/integration/mongoose-spec.js for an extended test example

Using mockReduce with with node-mongodb-native

Caution: This feature is still work in progress. Generally it should work, I haven't fully tested it yet

var mongodb = require('mongodb');
var mockReduce = require('mock-reduce');
 
describe('node-mongodb-native Test', function() {
    it('runs a mock reduce and returns the expected data', function() {
        var testData = [
            {"someId": 42, "someString": "Chickens don't clap!", "value": 4},
            {"someId": 5, "someString": "I'm on the job.", "value": 5},
            {"someId": 42, "someString": "Annyong", "value": 8},
            {"someId": 5, "someString": "Come on, this is a Bluth family celebration.", "value": 5}
        ];
        
        var reducedData = [
            {"_id": 5, value: 10},
            {"_id": 42, value: 12}
        ];
        
        mockReduce.install(mongodb);
        mockReduce.setNextTestData(testData);
        mongodb.connect('mongodb://localhost:27017/test', function(err, db) {
            var collection = db.collection('collection_name');
            var map = function() {...}
            var reduce = function() {...}
            var options = {
                scope: {
                    additional: 'variable'
                }
            };
            var result = collection.mapReduce(map, reduce, options);
        });
        expect(result).toEqual(reducedData);
        mockReduce.uninstall();
    });
});

Available methods

MockReduce stores almost every step of a map reduce operation. Try one of the following methods:

mockReduce.map.getEmits();
mockReduce.map.getMappedData();
mockReduce.reduce.getReducedData();

Supported methods

So far the following methods are supported:

  • map
  • reduce
  • finalize
  • scope
  • done callback

Running MockReduce's own tests

MockReduce was completely developed test-driven. If you wish to run its own tests, clone the git repo and run

npm install
npm test

Changelog

0.1.0

  • Security: Fix security vulnerabilities in mongoose and karma dependencies
  • Change: Do not put MockReduce and all subclasses into global scope but instead use require
  • Bugfix: Make sure index.js is required uncached in tests
  • Update: Bump mongoose to version 5.7.10
  • Update: Bump jasmine to version 3.5.0

0.0.5

  • Bugfix: Don't break when connect is called without a callback

0.0.4

  • Install does not break the original connector when running twice

0.0.3

  • Fixed "window is not defined" issue

0.0.2

  • MockReduce can now be used directly within node itself (PhantomJS not needed anymore)

Package Sidebar

Install

npm i mock-reduce

Weekly Downloads

57

Version

0.1.0

License

ISC

Unpacked Size

45.9 kB

Total Files

20

Last publish

Collaborators

  • djungowski