mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-20 12:29:55 +08:00
107 lines
3.6 KiB
TypeScript
107 lines
3.6 KiB
TypeScript
import { ModuleLoader } from '../module-loader';
|
|
import { mockModuleLoader, mockNgModuleLoader } from '../mock-providers';
|
|
import { NgModuleLoader } from '../ng-module-loader';
|
|
|
|
|
|
describe('module-loader', () => {
|
|
|
|
describe('load', () => {
|
|
|
|
it('should call ngModuleLoader and receive a promise back', (done: Function) => {
|
|
spyOn(ngModuleLoader, 'load').and.returnValue(Promise.resolve());
|
|
|
|
let pathPrefix = '../some/known/path';
|
|
let exportSuffix = 'SomeModule';
|
|
let loadChildren = pathPrefix + '#' + exportSuffix;
|
|
|
|
let promise = moduleLoader.load(loadChildren);
|
|
|
|
promise.then((response) => {
|
|
expect(ngModuleLoader.load).toHaveBeenCalledWith(pathPrefix, exportSuffix);
|
|
}).catch((err: Error) => {
|
|
done(err);
|
|
});
|
|
});
|
|
|
|
it('should only call the ngModuleLoader when there is not an active request', () => {
|
|
let resolve: any = null;
|
|
let reject: any = null;
|
|
let promise = new Promise((scopedResolved, scopedReject) => {
|
|
resolve = scopedResolved;
|
|
reject = scopedReject;
|
|
});
|
|
|
|
spyOn(ngModuleLoader, 'load').and.returnValue(promise);
|
|
|
|
let pathPrefix = '../some/known/path';
|
|
let exportSuffix = 'SomeModule';
|
|
let loadChildren = pathPrefix + '#' + exportSuffix;
|
|
|
|
promise = moduleLoader.load(loadChildren);
|
|
|
|
// the promise is not resolved
|
|
let secondPromise = moduleLoader.load(loadChildren);
|
|
|
|
// 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;
|
|
var ngModuleLoader: NgModuleLoader;
|
|
|
|
beforeEach(() => {
|
|
ngModuleLoader = mockNgModuleLoader();
|
|
moduleLoader = mockModuleLoader(ngModuleLoader);
|
|
});
|
|
|
|
});
|