nutra-mock
v0.0.9
Published
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.
Downloads
32
Maintainers
Readme
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
})
})