UNPKG

3.81 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.resetAppContext = 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 testFunc and clean it up at the end
32
33Arguments are: ([contextGeneratingFunc | contextObj], testFunc)
34
35Most commonly generate the context using a function. It can either return the context object
36directly or use initModules internally.
37
38Note: this can't be called wrapping a 'describe' function. It only works on 'it'.
39 */
40
41var resetAppContext = exports.resetAppContext = function resetAppContext() {
42 Object.keys(_appContext.appContext).forEach(function (key) {
43 delete _appContext.appContext[key];
44 });
45};
46
47exports.default = function () {
48 for (var _len = arguments.length, contextAndFunc = Array(_len), _key = 0; _key < _len; _key++) {
49 contextAndFunc[_key] = arguments[_key];
50 }
51
52 return (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
53 var existingKeys, _ref2, _ref3, contextObjOrFunc, testFunc, originalAppContext, context;
54
55 return _regenerator2.default.wrap(function _callee$(_context) {
56 while (1) {
57 switch (_context.prev = _context.next) {
58 case 0:
59 if (!(recursiveDepth === 0)) {
60 _context.next = 5;
61 break;
62 }
63
64 existingKeys = Object.keys(_appContext.appContext);
65
66 if (!existingKeys.length) {
67 _context.next = 5;
68 break;
69 }
70
71 resetAppContext();
72 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?');
73
74 case 5:
75 _ref2 = contextAndFunc.length <= 1 ? [{}].concat(contextAndFunc) : contextAndFunc, _ref3 = (0, _slicedToArray3.default)(_ref2, 2), contextObjOrFunc = _ref3[0], testFunc = _ref3[1];
76 originalAppContext = (0, _extends3.default)({}, _appContext.appContext);
77
78 recursiveDepth += 1;
79 _context.prev = 8;
80
81 if (!(typeof contextObjOrFunc === 'function')) {
82 _context.next = 15;
83 break;
84 }
85
86 _context.next = 12;
87 return contextObjOrFunc();
88
89 case 12:
90 _context.t0 = _context.sent;
91 _context.next = 16;
92 break;
93
94 case 15:
95 _context.t0 = contextObjOrFunc;
96
97 case 16:
98 context = _context.t0;
99
100 if (context) {
101 Object.assign(_appContext.appContext, context);
102 }
103 _context.next = 20;
104 return testFunc(_appContext.appContext);
105
106 case 20:
107 return _context.abrupt('return', _context.sent);
108
109 case 21:
110 _context.prev = 21;
111
112 recursiveDepth -= 1;
113 resetAppContext();
114 Object.assign(_appContext.appContext, originalAppContext);
115 return _context.finish(21);
116
117 case 26:
118 case 'end':
119 return _context.stop();
120 }
121 }
122 }, _callee, undefined, [[8,, 21, 26]]);
123 }));
124};
\No newline at end of file