UNPKG

rewiremock

Version:

Advanced dependency mocking device.

94 lines (80 loc) 2.55 kB
import { join } from 'path'; import parse from 'path-parse'; import getScope from './globals'; import { getExtensions } from './constants'; import { getModuleName } from "./module"; var genMock = function genMock(name) { return { name: name, value: {} }; }; var insertMock = function insertMock(name, mock) { return getScope().mocks[name] = mock; }; var resetMock = function resetMock(name) { return insertMock(name, genMock(name)); }; var pickFrom = function pickFrom(mocks, name) { var ext = getExtensions().filter(function (ext) { return mocks.hasOwnProperty(name + ext); }).shift(); if (ext !== undefined) { return mocks[name + ext]; } }; var getMock = function getMock(name) { var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getScope(); var mocks = scope.mocks; var fn = parse(name); var shortName = join(fn.dir, fn.name); var wshortName = fn.dir + '/' + fn.name; var indexName = fn.name === 'index' ? fn.dir : null; var mock = pickFrom(mocks, name) || indexName && pickFrom(mocks, indexName) || pickFrom(mocks, shortName) || pickFrom(mocks, wshortName); if (!mock && scope.parentScope) { return getMock(name, scope.parentScope); } return mock; }; export var getAsyncModuleName = function getAsyncModuleName(creator, parent) { return creator.toString() + ':' + getModuleName(parent); }; var getAsyncMock = function getAsyncMock(creator, parent) { var scope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getScope(); var signature = getAsyncModuleName(creator, parent); var mock = resetMock(signature); scope.asyncMocks.push({ mock: mock, creator: creator, loaded: false }); return mock; }; var collectMocks = function collectMocks(result, selector) { var collect = function collect(scope) { if (scope.parentScope) { collect(scope.parentScope); } var mocks = selector(scope); Object.keys(mocks).forEach(function (key) { return result[key] = mocks[key]; }); }; collect(getScope()); return result; }; var getAllMocks = function getAllMocks() { return collectMocks({}, function (scope) { return scope.mocks; }); }; var getAllAsyncMocks = function getAllAsyncMocks() { return collectMocks([], function (scope) { return scope.asyncMocks.filter(function (mock) { return !mock.loaded; }); }).filter(function (mock) { return !!mock; }); }; export { insertMock, getMock, getAsyncMock, getAllAsyncMocks, getAllMocks, resetMock };