|
51 | 51 | var syncZone = ambientZone.fork(new SyncTestZoneSpec('jasmine.describe'));
|
52 | 52 | var symbol = Zone.__symbol__;
|
53 | 53 | // whether patch jasmine clock when in fakeAsync
|
54 |
| - var enableClockPatch = _global[symbol('fakeAsyncPatchLock')] === true; |
| 54 | + var disablePatchingJasmineClock = _global[symbol('fakeAsyncDisablePatchingClock')] === true; |
| 55 | + // the original variable name fakeAsyncPatchLock is not accurate, so the name will be |
| 56 | + // fakeAsyncAutoFakeAsyncWhenClockPatched and if this enablePatchingJasmineClock is false, we also |
| 57 | + // automatically disable the auto jump into fakeAsync feature |
| 58 | + var enableAutoFakeAsyncWhenClockPatched = !disablePatchingJasmineClock && |
| 59 | + ((_global[symbol('fakeAsyncPatchLock')] === true) || |
| 60 | + (_global[symbol('fakeAsyncAutoFakeAsyncWhenClockPatched')] === true)); |
55 | 61 | var ignoreUnhandledRejection = _global[symbol('ignoreUnhandledRejection')] === true;
|
56 | 62 | if (!ignoreUnhandledRejection) {
|
57 | 63 | var globalErrors_1 = jasmine.GlobalErrors;
|
|
100 | 106 | return originalJasmineFn.apply(this, arguments);
|
101 | 107 | };
|
102 | 108 | });
|
103 |
| - // need to patch jasmine.clock().mockDate and jasmine.clock().tick() so |
104 |
| - // they can work properly in FakeAsyncTest |
105 |
| - var originalClockFn = (jasmine[symbol('clock')] = jasmine['clock']); |
106 |
| - jasmine['clock'] = function () { |
107 |
| - var clock = originalClockFn.apply(this, arguments); |
108 |
| - if (!clock[symbol('patched')]) { |
109 |
| - clock[symbol('patched')] = symbol('patched'); |
110 |
| - var originalTick_1 = (clock[symbol('tick')] = clock.tick); |
111 |
| - clock.tick = function () { |
112 |
| - var fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
113 |
| - if (fakeAsyncZoneSpec) { |
114 |
| - return fakeAsyncZoneSpec.tick.apply(fakeAsyncZoneSpec, arguments); |
115 |
| - } |
116 |
| - return originalTick_1.apply(this, arguments); |
117 |
| - }; |
118 |
| - var originalMockDate_1 = (clock[symbol('mockDate')] = clock.mockDate); |
119 |
| - clock.mockDate = function () { |
120 |
| - var fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
121 |
| - if (fakeAsyncZoneSpec) { |
122 |
| - var dateTime = arguments.length > 0 ? arguments[0] : new Date(); |
123 |
| - return fakeAsyncZoneSpec.setCurrentRealTime.apply(fakeAsyncZoneSpec, dateTime && typeof dateTime.getTime === 'function' ? [dateTime.getTime()] : |
124 |
| - arguments); |
| 109 | + if (!disablePatchingJasmineClock) { |
| 110 | + // need to patch jasmine.clock().mockDate and jasmine.clock().tick() so |
| 111 | + // they can work properly in FakeAsyncTest |
| 112 | + var originalClockFn_1 = (jasmine[symbol('clock')] = jasmine['clock']); |
| 113 | + jasmine['clock'] = function () { |
| 114 | + var clock = originalClockFn_1.apply(this, arguments); |
| 115 | + if (!clock[symbol('patched')]) { |
| 116 | + clock[symbol('patched')] = symbol('patched'); |
| 117 | + var originalTick_1 = (clock[symbol('tick')] = clock.tick); |
| 118 | + clock.tick = function () { |
| 119 | + var fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
| 120 | + if (fakeAsyncZoneSpec) { |
| 121 | + return fakeAsyncZoneSpec.tick.apply(fakeAsyncZoneSpec, arguments); |
| 122 | + } |
| 123 | + return originalTick_1.apply(this, arguments); |
| 124 | + }; |
| 125 | + var originalMockDate_1 = (clock[symbol('mockDate')] = clock.mockDate); |
| 126 | + clock.mockDate = function () { |
| 127 | + var fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
| 128 | + if (fakeAsyncZoneSpec) { |
| 129 | + var dateTime = arguments.length > 0 ? arguments[0] : new Date(); |
| 130 | + return fakeAsyncZoneSpec.setCurrentRealTime.apply(fakeAsyncZoneSpec, dateTime && typeof dateTime.getTime === 'function' ? [dateTime.getTime()] : |
| 131 | + arguments); |
| 132 | + } |
| 133 | + return originalMockDate_1.apply(this, arguments); |
| 134 | + }; |
| 135 | + // for auto go into fakeAsync feature, we need the flag to enable it |
| 136 | + if (enableAutoFakeAsyncWhenClockPatched) { |
| 137 | + ['install', 'uninstall'].forEach(function (methodName) { |
| 138 | + var originalClockFn = (clock[symbol(methodName)] = clock[methodName]); |
| 139 | + clock[methodName] = function () { |
| 140 | + var FakeAsyncTestZoneSpec = Zone['FakeAsyncTestZoneSpec']; |
| 141 | + if (FakeAsyncTestZoneSpec) { |
| 142 | + jasmine[symbol('clockInstalled')] = 'install' === methodName; |
| 143 | + return; |
| 144 | + } |
| 145 | + return originalClockFn.apply(this, arguments); |
| 146 | + }; |
| 147 | + }); |
125 | 148 | }
|
126 |
| - return originalMockDate_1.apply(this, arguments); |
127 |
| - }; |
128 |
| - // for auto go into fakeAsync feature, we need the flag to enable it |
129 |
| - if (enableClockPatch) { |
130 |
| - ['install', 'uninstall'].forEach(function (methodName) { |
131 |
| - var originalClockFn = (clock[symbol(methodName)] = clock[methodName]); |
132 |
| - clock[methodName] = function () { |
133 |
| - var FakeAsyncTestZoneSpec = Zone['FakeAsyncTestZoneSpec']; |
134 |
| - if (FakeAsyncTestZoneSpec) { |
135 |
| - jasmine[symbol('clockInstalled')] = 'install' === methodName; |
136 |
| - return; |
137 |
| - } |
138 |
| - return originalClockFn.apply(this, arguments); |
139 |
| - }; |
140 |
| - }); |
141 | 149 | }
|
142 |
| - } |
143 |
| - return clock; |
144 |
| - }; |
| 150 | + return clock; |
| 151 | + }; |
| 152 | + } |
145 | 153 | /**
|
146 | 154 | * Gets a function wrapping the body of a Jasmine `describe` block to execute in a
|
147 | 155 | * synchronous-only zone.
|
|
155 | 163 | var isClockInstalled = !!jasmine[symbol('clockInstalled')];
|
156 | 164 | var testProxyZoneSpec = queueRunner.testProxyZoneSpec;
|
157 | 165 | var testProxyZone = queueRunner.testProxyZone;
|
158 |
| - if (isClockInstalled && enableClockPatch) { |
| 166 | + if (isClockInstalled && enableAutoFakeAsyncWhenClockPatched) { |
159 | 167 | // auto run a fakeAsync
|
160 | 168 | var fakeAsyncModule = Zone[Zone.__symbol__('fakeAsyncTest')];
|
161 | 169 | if (fakeAsyncModule && typeof fakeAsyncModule.fakeAsync === 'function') {
|
|
0 commit comments