|
67 | 67 | return originalJasmineFn.apply(this, arguments); |
68 | 68 | }; |
69 | 69 | }); |
70 | | - if (enableClockPatch) { |
71 | | - const originalClockFn: Function = ((jasmine as any)[symbol('clock')] = jasmine['clock']); |
72 | | - (jasmine as any)['clock'] = function() { |
73 | | - const clock = originalClockFn.apply(this, arguments); |
| 70 | + |
| 71 | + // need to patch jasmine.clock().mockDate and jasmine.clock().tick() so |
| 72 | + // they can work properly in FakeAsyncTest |
| 73 | + const originalClockFn: Function = ((jasmine as any)[symbol('clock')] = jasmine['clock']); |
| 74 | + (jasmine as any)['clock'] = function() { |
| 75 | + const clock = originalClockFn.apply(this, arguments); |
| 76 | + if (!clock[symbol('patched')]) { |
| 77 | + clock[symbol('patched')] = symbol('patched'); |
74 | 78 | const originalTick = (clock[symbol('tick')] = clock.tick); |
75 | 79 | clock.tick = function() { |
76 | 80 | const fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
|
83 | 87 | clock.mockDate = function() { |
84 | 88 | const fakeAsyncZoneSpec = Zone.current.get('FakeAsyncTestZoneSpec'); |
85 | 89 | if (fakeAsyncZoneSpec) { |
86 | | - const dateTime = arguments[0]; |
| 90 | + const dateTime = arguments.length > 0 ? arguments[0] : new Date(); |
87 | 91 | return fakeAsyncZoneSpec.setCurrentRealTime.apply( |
88 | 92 | fakeAsyncZoneSpec, |
89 | 93 | dateTime && typeof dateTime.getTime === 'function' ? [dateTime.getTime()] : |
90 | 94 | arguments); |
91 | 95 | } |
92 | 96 | return originalMockDate.apply(this, arguments); |
93 | 97 | }; |
94 | | - ['install', 'uninstall'].forEach(methodName => { |
95 | | - const originalClockFn: Function = (clock[symbol(methodName)] = clock[methodName]); |
96 | | - clock[methodName] = function() { |
97 | | - const FakeAsyncTestZoneSpec = (Zone as any)['FakeAsyncTestZoneSpec']; |
98 | | - if (FakeAsyncTestZoneSpec) { |
99 | | - (jasmine as any)[symbol('clockInstalled')] = 'install' === methodName; |
100 | | - return; |
101 | | - } |
102 | | - return originalClockFn.apply(this, arguments); |
103 | | - }; |
104 | | - }); |
105 | | - return clock; |
106 | | - }; |
107 | | - } |
| 98 | + // for auto go into fakeAsync feature, we need the flag to enable it |
| 99 | + if (enableClockPatch) { |
| 100 | + ['install', 'uninstall'].forEach(methodName => { |
| 101 | + const originalClockFn: Function = (clock[symbol(methodName)] = clock[methodName]); |
| 102 | + clock[methodName] = function() { |
| 103 | + const FakeAsyncTestZoneSpec = (Zone as any)['FakeAsyncTestZoneSpec']; |
| 104 | + if (FakeAsyncTestZoneSpec) { |
| 105 | + (jasmine as any)[symbol('clockInstalled')] = 'install' === methodName; |
| 106 | + return; |
| 107 | + } |
| 108 | + return originalClockFn.apply(this, arguments); |
| 109 | + }; |
| 110 | + }); |
| 111 | + } |
| 112 | + } |
| 113 | + return clock; |
| 114 | + }; |
108 | 115 |
|
109 | 116 | /** |
110 | 117 | * Gets a function wrapping the body of a Jasmine `describe` block to execute in a |
|
0 commit comments