|
40 | 40 | const symbol = Zone.__symbol__;
|
41 | 41 |
|
42 | 42 | // whether patch jasmine clock when in fakeAsync
|
43 |
| - const enableClockPatch = _global[symbol('fakeAsyncPatchLock')] === true; |
| 43 | + const disablePatchingJasmineClock = _global[symbol('fakeAsyncDisablePatchingClock')] === true; |
| 44 | + // the original variable name fakeAsyncPatchLock is not accurate, so the name will be |
| 45 | + // fakeAsyncAutoFakeAsyncWhenClockPatched and if this enablePatchingJasmineClock is false, we also |
| 46 | + // automatically disable the auto jump into fakeAsync feature |
| 47 | + const enableAutoFakeAsyncWhenClockPatched = !disablePatchingJasmineClock && |
| 48 | + ((_global[symbol('fakeAsyncPatchLock')] === true) || |
| 49 | + (_global[symbol('fakeAsyncAutoFakeAsyncWhenClockPatched')] === true)); |
44 | 50 |
|
45 | 51 | const ignoreUnhandledRejection = _global[symbol('ignoreUnhandledRejection')] === true;
|
46 | 52 |
|
|
94 | 100 | };
|
95 | 101 | });
|
96 | 102 |
|
97 |
| - // need to patch jasmine.clock().mockDate and jasmine.clock().tick() so |
98 |
| - // they can work properly in FakeAsyncTest |
99 |
| - const originalClockFn: Function = ((jasmine as any)[symbol('clock')] = jasmine['clock']); |
100 |
| - (jasmine as any)['clock'] = function() { |
101 |
| - const clock = originalClockFn.apply(this, arguments); |
102 |
| - if (!clock[symbol('patched')]) { |
103 |
| - clock[symbol('patched')] = symbol('patched'); |
104 |
| - const originalTick = (clock[symbol('tick')] = clock.tick); |
105 |
| - clock.tick = function() { |
106 |
| - const fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
107 |
| - if (fakeAsyncZoneSpec) { |
108 |
| - return fakeAsyncZoneSpec.tick.apply(fakeAsyncZoneSpec, arguments); |
109 |
| - } |
110 |
| - return originalTick.apply(this, arguments); |
111 |
| - }; |
112 |
| - const originalMockDate = (clock[symbol('mockDate')] = clock.mockDate); |
113 |
| - clock.mockDate = function() { |
114 |
| - const fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
115 |
| - if (fakeAsyncZoneSpec) { |
116 |
| - const dateTime = arguments.length > 0 ? arguments[0] : new Date(); |
117 |
| - return fakeAsyncZoneSpec.setCurrentRealTime.apply( |
118 |
| - fakeAsyncZoneSpec, |
119 |
| - dateTime && typeof dateTime.getTime === 'function' ? [dateTime.getTime()] : |
120 |
| - arguments); |
| 103 | + if (!disablePatchingJasmineClock) { |
| 104 | + // need to patch jasmine.clock().mockDate and jasmine.clock().tick() so |
| 105 | + // they can work properly in FakeAsyncTest |
| 106 | + const originalClockFn: Function = ((jasmine as any)[symbol('clock')] = jasmine['clock']); |
| 107 | + (jasmine as any)['clock'] = function() { |
| 108 | + const clock = originalClockFn.apply(this, arguments); |
| 109 | + if (!clock[symbol('patched')]) { |
| 110 | + clock[symbol('patched')] = symbol('patched'); |
| 111 | + const originalTick = (clock[symbol('tick')] = clock.tick); |
| 112 | + clock.tick = function() { |
| 113 | + const fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
| 114 | + if (fakeAsyncZoneSpec) { |
| 115 | + return fakeAsyncZoneSpec.tick.apply(fakeAsyncZoneSpec, arguments); |
| 116 | + } |
| 117 | + return originalTick.apply(this, arguments); |
| 118 | + }; |
| 119 | + const originalMockDate = (clock[symbol('mockDate')] = clock.mockDate); |
| 120 | + clock.mockDate = function() { |
| 121 | + const fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
| 122 | + if (fakeAsyncZoneSpec) { |
| 123 | + const dateTime = arguments.length > 0 ? arguments[0] : new Date(); |
| 124 | + return fakeAsyncZoneSpec.setCurrentRealTime.apply( |
| 125 | + fakeAsyncZoneSpec, |
| 126 | + dateTime && typeof dateTime.getTime === 'function' ? [dateTime.getTime()] : |
| 127 | + arguments); |
| 128 | + } |
| 129 | + return originalMockDate.apply(this, arguments); |
| 130 | + }; |
| 131 | + // for auto go into fakeAsync feature, we need the flag to enable it |
| 132 | + if (enableAutoFakeAsyncWhenClockPatched) { |
| 133 | + ['install', 'uninstall'].forEach(methodName => { |
| 134 | + const originalClockFn: Function = (clock[symbol(methodName)] = clock[methodName]); |
| 135 | + clock[methodName] = function() { |
| 136 | + const FakeAsyncTestZoneSpec = (Zone as any)['FakeAsyncTestZoneSpec']; |
| 137 | + if (FakeAsyncTestZoneSpec) { |
| 138 | + (jasmine as any)[symbol('clockInstalled')] = 'install' === methodName; |
| 139 | + return; |
| 140 | + } |
| 141 | + return originalClockFn.apply(this, arguments); |
| 142 | + }; |
| 143 | + }); |
121 | 144 | }
|
122 |
| - return originalMockDate.apply(this, arguments); |
123 |
| - }; |
124 |
| - // for auto go into fakeAsync feature, we need the flag to enable it |
125 |
| - if (enableClockPatch) { |
126 |
| - ['install', 'uninstall'].forEach(methodName => { |
127 |
| - const originalClockFn: Function = (clock[symbol(methodName)] = clock[methodName]); |
128 |
| - clock[methodName] = function() { |
129 |
| - const FakeAsyncTestZoneSpec = (Zone as any)['FakeAsyncTestZoneSpec']; |
130 |
| - if (FakeAsyncTestZoneSpec) { |
131 |
| - (jasmine as any)[symbol('clockInstalled')] = 'install' === methodName; |
132 |
| - return; |
133 |
| - } |
134 |
| - return originalClockFn.apply(this, arguments); |
135 |
| - }; |
136 |
| - }); |
137 | 145 | }
|
138 |
| - } |
139 |
| - return clock; |
140 |
| - }; |
141 |
| - |
| 146 | + return clock; |
| 147 | + }; |
| 148 | + } |
142 | 149 | /**
|
143 | 150 | * Gets a function wrapping the body of a Jasmine `describe` block to execute in a
|
144 | 151 | * synchronous-only zone.
|
|
154 | 161 | const testProxyZoneSpec = queueRunner.testProxyZoneSpec;
|
155 | 162 | const testProxyZone = queueRunner.testProxyZone;
|
156 | 163 | let lastDelegate;
|
157 |
| - if (isClockInstalled && enableClockPatch) { |
| 164 | + if (isClockInstalled && enableAutoFakeAsyncWhenClockPatched) { |
158 | 165 | // auto run a fakeAsync
|
159 | 166 | const fakeAsyncModule = (Zone as any)[Zone.__symbol__('fakeAsyncTest')];
|
160 | 167 | if (fakeAsyncModule && typeof fakeAsyncModule.fakeAsync === 'function') {
|
|
0 commit comments