UNPKG

3.36 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.mockAppContext = undefined;
7
8var _regenerator = require('babel-runtime/regenerator');
9
10var _regenerator2 = _interopRequireDefault(_regenerator);
11
12var _extends2 = require('babel-runtime/helpers/extends');
13
14var _extends3 = _interopRequireDefault(_extends2);
15
16var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
17
18var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
19
20var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
21
22var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
23
24var _appContext = require('./appContext');
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
28var recursiveDepth = 0;
29
30/*
31Add to appContext for func and clean it up at the end
32
33Arguments are: ([context,] func)
34
35Context is optional, so you can just pass: (func)
36
37Note: this can't be called wrapping a 'describe' function. It only works on 'it'.
38 */
39var clearAppContext = function clearAppContext() {
40 Object.keys(_appContext.appContext).forEach(function (key) {
41 delete _appContext.appContext[key];
42 });
43};
44
45var mockAppContext = exports.mockAppContext = function mockAppContext() {
46 for (var _len = arguments.length, contextAndFunc = Array(_len), _key = 0; _key < _len; _key++) {
47 contextAndFunc[_key] = arguments[_key];
48 }
49
50 return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
51 var existingKeys, _ref2, _ref3, contextObjOrFunc, func, originalAppContext, context;
52
53 return _regenerator2.default.wrap(function _callee$(_context) {
54 while (1) {
55 switch (_context.prev = _context.next) {
56 case 0:
57 if (!(recursiveDepth === 0)) {
58 _context.next = 5;
59 break;
60 }
61
62 existingKeys = Object.keys(_appContext.appContext);
63
64 if (!existingKeys.length) {
65 _context.next = 5;
66 break;
67 }
68
69 clearAppContext();
70 throw new Error('appContext appears to have objects leftover from a previous test: ' + existingKeys + '\n' + 'Did you forget to use mockAppContext() around code that modified the context?');
71
72 case 5:
73 _ref2 = contextAndFunc.length <= 1 ? [{}].concat(contextAndFunc) : contextAndFunc, _ref3 = (0, _slicedToArray3.default)(_ref2, 2), contextObjOrFunc = _ref3[0], func = _ref3[1];
74 originalAppContext = (0, _extends3.default)({}, _appContext.appContext);
75
76 recursiveDepth += 1;
77 _context.prev = 8;
78 context = typeof contextObjOrFunc === 'function' ? contextObjOrFunc() : contextObjOrFunc;
79
80 if (context) {
81 Object.assign(_appContext.appContext, context);
82 }
83 _context.next = 13;
84 return func(_appContext.appContext);
85
86 case 13:
87 return _context.abrupt('return', _context.sent);
88
89 case 14:
90 _context.prev = 14;
91
92 recursiveDepth -= 1;
93 clearAppContext();
94 Object.assign(_appContext.appContext, originalAppContext);
95 return _context.finish(14);
96
97 case 19:
98 case 'end':
99 return _context.stop();
100 }
101 }
102 }, _callee, undefined, [[8,, 14, 19]]);
103 }));
104};
\No newline at end of file