diff --git a/src/util/test/module-loader.spec.ts b/src/util/test/module-loader.spec.ts index 542e6f2347..b53c3465ff 100644 --- a/src/util/test/module-loader.spec.ts +++ b/src/util/test/module-loader.spec.ts @@ -10,14 +10,14 @@ describe('module-loader', () => { it('should call ngModuleLoader and receive a promise back', (done: Function) => { spyOn(ngModuleLoader, 'load').and.returnValue(Promise.resolve()); - const knownPathPrefix = '../some/known/path'; - const knownExportSuffix = 'SomeModule'; - const loadChildrenValue = knownPathPrefix + '#' + knownExportSuffix; + let pathPrefix = '../some/known/path'; + let exportSuffix = 'SomeModule'; + let loadChildren = pathPrefix + '#' + exportSuffix; - const promise = moduleLoader.load(loadChildrenValue); + let promise = moduleLoader.load(loadChildren); promise.then((response) => { - expect(ngModuleLoader.load).toHaveBeenCalledWith(knownPathPrefix, knownExportSuffix); + expect(ngModuleLoader.load).toHaveBeenCalledWith(pathPrefix, exportSuffix); }).catch((err: Error) => { done(err); }); @@ -33,21 +33,66 @@ describe('module-loader', () => { spyOn(ngModuleLoader, 'load').and.returnValue(promise); - const knownPathPrefix = '../some/known/path'; - const knownExportSuffix = 'SomeModule'; - const loadChildrenValue = knownPathPrefix + '#' + knownExportSuffix; + let pathPrefix = '../some/known/path'; + let exportSuffix = 'SomeModule'; + let loadChildren = pathPrefix + '#' + exportSuffix; - promise = moduleLoader.load(loadChildrenValue); + promise = moduleLoader.load(loadChildren); // the promise is not resolved - let secondPromise = moduleLoader.load(loadChildrenValue); + let secondPromise = moduleLoader.load(loadChildren); - // we would expect the same promise to be returned both times + // The promise returned should be the cached promise expect(promise).toEqual(secondPromise); expect(ngModuleLoader.load).toHaveBeenCalledTimes(1); }); + it('should call the ngModuleLoader twice and return the active request', () => { + let resolve: any = null; + let reject: any = null; + let promise = new Promise((scopedResolved, scopedReject) => { + resolve = scopedResolved; + reject = scopedReject; + }); + let promise2 = new Promise((scopedResolved, scopedReject) => { + resolve = scopedResolved; + reject = scopedReject; + }); + + spyOn(ngModuleLoader, 'load').and.returnValue(promise); + + // Load the first module + let pathPrefix = '../some/known/path'; + let exportSuffix = 'SomeModule'; + let loadChildren = pathPrefix + '#' + exportSuffix; + + promise = moduleLoader.load(loadChildren); + expect(ngModuleLoader.load).toHaveBeenCalledWith(pathPrefix, exportSuffix); + + // Load the second module + let pathPrefix2 = '../another/known/path'; + let exportSuffix2 = 'AnotherModule'; + let loadChildren2 = pathPrefix2 + '#' + exportSuffix2; + + promise2 = moduleLoader.load(loadChildren2); + expect(ngModuleLoader.load).toHaveBeenCalledWith(pathPrefix2, exportSuffix2); + + // Load the first module before the promise has resolved + let secondPromise = moduleLoader.load(loadChildren); + + // The promise returned from the first module should be the cached promise + expect(promise).toEqual(secondPromise); + + // Load the second module before the promise has resolved + let thirdPromise = moduleLoader.load(loadChildren2); + + // The promise returned from the second module should be the cached promise + expect(promise2).toEqual(thirdPromise); + + expect(ngModuleLoader.load).toHaveBeenCalledTimes(2); + }); + }); var moduleLoader: ModuleLoader;