testExecOnLoadErrorModuleInfoString() {
    // Expect a callback to be called with callback type ERROR, the right
    // module id and failure type INIT_ERROR.
    const errorCallback = testing.createFunctionMock('callback');
    errorCallback(
        ModuleManager.CallbackType.ERROR, 'b',
        new ModuleLoadFailure(ModuleLoadFailure.Type.INIT_ERROR));

    errorCallback.$replay();

    const mm = new ModuleManager();
    mm.setLoader(createSuccessfulNonBatchLoader(mm));

    // Register the first callback before setting the module info map.
    mm.registerCallback(ModuleManager.CallbackType.ERROR, errorCallback);

    mm.setAllModuleInfoString('a/b/c');

    let execOnLoadBCalled = false;
    mm.execOnLoad('b', () => {
      execOnLoadBCalled = true;
      throw new Error();
    });

    assertThrows(() => {
      clock.tick(5);
    });

    assertTrue(
        'execOnLoad should have been called on module b.', execOnLoadBCalled);
    errorCallback.$verify();
  }
Tests that an error during execOnLoad will trigger the error callback.
Uses setAllModuleInfoString rather than setAllModuleInfo.
@suppress {checkTypes} suppression added to enable type checking