The "nutra-mock" module is a mocking library for the "[N.U.T.R.A.](https://github.com/m-a-r-c-e-l-i-n-o/nutra)" unit test runner.


Keywords
N.U.T.R.A., stub, mock, fake, unit, test, testing
License
MIT
Install
npm install nutra-mock@0.0.8

Documentation

nutra-mock

The "nutra-mock" module is a mocking library for the "N.U.T.R.A." unit test runner. Currently, it allows for mocking of all global imports and constants in the main execution context of a valid ES6 module file. It does this by statically analyzing the file with Espree 3+ and transforms the relevant globals in the deeper contexts into objects whose properties can be changed at any time — essentially allowing you to mock just about anything!

Installation

npm install --save-dev nutra nutra-mock

Add Plugin Configuration:

Create a "nutra.config.js" config file in the root of your project and populate it with the following:

// nutra.config.js
module.exports = function( config ) {
  config.set({
    frameworks: ['nutra-jasmine'],
    files: ['specs/**/*.js', 'src/**/*.js'], // Modify to include your own app & spec files
    preprocessors: {
        'src/**/*.js': ['nutra-mock', 'nutra-babel'] // Modify to include your own app files
    }
  })
  // For more configuration options, please take a look at:
  // https://github.com/m-a-r-c-e-l-i-n-o/nutra#configuration-anatomy
}

Usage

In your scripts:

import Path from 'path'

const Foo = () => {
    Path.join('hello', 'world') // This will be made available for mocking
    return Path
}

const Bar = () => Foo // This will also be made available for mocking

export default Foo
export { Bar }

In your tests:

import Path from 'path'
import Foo, { Bar } from '../../src/foo.js'

const Mock = NutraMock.getEntry('src/some-file.js')
// THe path is relative to current working directory, do not include "./" or "."

describe ('Foo', () => {
    it ('should initially not mock Foo\'s "Path" dependency', () => {
        expect(Foo()).toBe(Path) // The native "path" module
    })
    it ('should eventually mock Foo\'s "Path" dependency', () => {
        const mockPath = {
            join: (one, two) => {
                expect(one).toBe('hello')
                expect(two).toBe('world')
            }
        }
        Mock.set('Path', mockPath)
        expect(Foo()).toBe(mockPath) // The "mockPath" object
    })
    it ('should inevitably unmock Foo\'s "Path" dependency', () => {
        Mock.reset('Path')
        expect(Foo()).toBe(Path) // The native "path" module
    })
})

describe ('Bar', () => {
    it ('should initially not mock Bar\'s "Foo" dependency', () => {
        expect(Bar()).toBe(Foo) // The original "Foo" method
    })
    it ('should eventually mock Bar\'s "Foo" dependency', () => {
        const mockFoo = () => {}
        Mock.set('Foo', mockFoo)
        expect(Bar()).toBe(mockFoo) // The "mockFoo" method
    })
    it ('should inevitably unmock Bar\'s "Foo" dependency', () => {
        Mock.reset('Foo')
        expect(Bar()).toBe(Foo) // The original "Foo" method
    })
})