|
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