Просмотр исходного кода

afterViewEventsRendered testing util

Adam Shaw 7 лет назад
Родитель
Сommit
0776df25af
3 измененных файлов с 38 добавлено и 0 удалено
  1. 1 0
      src/Calendar.ts
  2. 2 0
      src/reducers/main.ts
  3. 35 0
      tests/automated/globals.js

+ 1 - 0
src/Calendar.ts

@@ -394,6 +394,7 @@ export default class Calendar {
       this._render(this.rerenderFlags)
       this.rerenderFlags = null
       this.releaseAfterSizingTriggers()
+      this.trigger('_rendered')
     }
   }
 

+ 2 - 0
src/reducers/main.ts

@@ -23,6 +23,8 @@ export function reduce(state: CalendarState, action: any, calendar: Calendar): C
     businessHoursDef: state.businessHoursDef
   }
 
+  calendar.trigger(action.type, action) // for testing hooks
+
   switch(action.type) {
 
     case 'SET_VIEW_TYPE':

+ 35 - 0
tests/automated/globals.js

@@ -219,3 +219,38 @@ window.spyCall = function(func) {
 window.pushOptions({
   timezone: 'UTC'
 })
+
+
+// Convoluted triggers that are really useful
+// ---------------------------------------------------------------------------------------------------------------------
+
+window.afterViewEventsRendered = function(calendar, callback) {
+
+  function monitor() {
+    var sourceHash = calendar.state.eventSources
+    var pendingSourceCnt = 0
+
+    for (var sourceId in sourceHash) {
+      if (sourceHash[sourceId].isFetching) {
+        pendingSourceCnt++
+      }
+    }
+
+    if (!pendingSourceCnt) {
+      callback()
+    } else {
+      calendar.one('RECEIVE_EVENT_SOURCE', function() {
+        pendingSourceCnt--
+        if (!pendingSourceCnt) {
+          calendar.one('_rendered', callback)
+        }
+      })
+    }
+  }
+
+  calendar.one('_rendered', monitor) // wait for calendar.render() to be called
+
+  calendar.on('SET_DATE_PROFILE', function() {
+    calendar.one('_rendered', monitor) // wait for the render after a view/date switch
+  })
+}