testExecOnLoadAbort() {
    const mm = getModuleManager({'a': [], 'b': [], 'c': []});
    mm.setLoader(createSuccessfulNonBatchLoader(mm));

    // When module is unloaded and abort is called, module still gets
    // loaded, but callback is cancelled.
    let execCalled1 = false;
    const callback1 = mm.execOnLoad('b', () => {
      execCalled1 = true;
    });
    callback1.abort();
    clock.tick(5);
    assertTrue('module "b" should be loaded', mm.isModuleLoaded('b'));
    assertFalse('execCalled3 should not be set', execCalled1);

    // When module is already loaded, execOnLoad is still async, so calling
    // abort should still cancel the callback.
    let execCalled2 = false;
    const callback2 = mm.execOnLoad('a', () => {
      execCalled2 = true;
    });
    callback2.abort();
    clock.tick(5);
    assertFalse('execCalled2 should not be set', execCalled2);
  }
Test aborting the callback called on module load.
     @suppress {missingProperties} suppression added to enable type checking