mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-20 20:33:32 +08:00
add unit tests
This commit is contained in:
@ -74,23 +74,25 @@ export interface LoadedModule {
|
|||||||
/**
|
/**
|
||||||
* @hidden
|
* @hidden
|
||||||
*/
|
*/
|
||||||
export function setupPreloadingImplementation(config: Config, deepLinkConfig: DeepLinkConfig, moduleLoader: ModuleLoader) {
|
export function setupPreloadingImplementation(config: Config, deepLinkConfig: DeepLinkConfig, moduleLoader: ModuleLoader): Promise<any> {
|
||||||
if (config.getBoolean('preloadModules') && deepLinkConfig && deepLinkConfig.links) {
|
if (config.getBoolean('preloadModules') && deepLinkConfig && deepLinkConfig.links) {
|
||||||
const linksToLoad = deepLinkConfig.links.filter(link => !!link.loadChildren && link.priority !== 'off');
|
const linksToLoad = deepLinkConfig.links.filter(link => !!link.loadChildren && link.priority !== 'off');
|
||||||
|
|
||||||
// Load the high priority modules first
|
// Load the high priority modules first
|
||||||
const highPriorityPromises = linksToLoad.filter(link => link.priority === 'high')
|
const highPriorityPromises = linksToLoad.filter(link => link.priority === 'high')
|
||||||
|
.map(link => moduleLoader.load(link.loadChildren));
|
||||||
|
|
||||||
|
return Promise.all(highPriorityPromises).then(() => {
|
||||||
|
// Load the low priority modules after the high priority are done
|
||||||
|
const lowPriorityPromises = linksToLoad.filter(link => link.priority === 'low')
|
||||||
.map(link => moduleLoader.load(link.loadChildren));
|
.map(link => moduleLoader.load(link.loadChildren));
|
||||||
|
return Promise.all(lowPriorityPromises);
|
||||||
Promise.all(highPriorityPromises).then(() => {
|
}).catch(err => {
|
||||||
// Load the low priority modules after the high priority are done
|
console.error(err.message);
|
||||||
const lowPriorityPromises = linksToLoad.filter(link => link.priority === 'low')
|
});
|
||||||
.map(link => moduleLoader.load(link.loadChildren));
|
} else {
|
||||||
return Promise.all(lowPriorityPromises);
|
return Promise.resolve();
|
||||||
}).catch(err => {
|
}
|
||||||
console.error(err.message);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { ModuleLoader, LAZY_LOADED_TOKEN } from '../module-loader';
|
import { ModuleLoader, LAZY_LOADED_TOKEN, setupPreloadingImplementation } from '../module-loader';
|
||||||
import { mockModuleLoader, mockNgModuleLoader } from '../mock-providers';
|
import { mockModuleLoader, mockNgModuleLoader, mockConfig } from '../mock-providers';
|
||||||
import { NgModuleLoader } from '../ng-module-loader';
|
import { NgModuleLoader } from '../ng-module-loader';
|
||||||
|
import { Config } from '../../config/config';
|
||||||
|
import { DeepLinkConfig } from '../../navigation/nav-util';
|
||||||
|
|
||||||
|
|
||||||
describe('module-loader', () => {
|
describe('module-loader', () => {
|
||||||
@ -115,12 +117,119 @@ describe('module-loader', () => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('setupPreloadingImplementation', () => {
|
||||||
|
|
||||||
|
it('should return a promise', (done: Function) => {
|
||||||
|
let promise = setupPreloadingImplementation(config, null, moduleLoader);
|
||||||
|
promise.then((response) => {
|
||||||
|
done();
|
||||||
|
}).catch((err: Error) => {
|
||||||
|
fail(err);
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not call ModuleLoader when preloading disabled', (done: Function) => {
|
||||||
|
spyOn(moduleLoader, 'load').and.returnValue(Promise.resolve());
|
||||||
|
|
||||||
|
config.set('preloadModules', false);
|
||||||
|
const deepLinkConfig: DeepLinkConfig = {
|
||||||
|
links: []
|
||||||
|
};
|
||||||
|
let promise = setupPreloadingImplementation(config, deepLinkConfig, moduleLoader);
|
||||||
|
promise.then((response) => {
|
||||||
|
expect(moduleLoader.load).not.toHaveBeenCalled();
|
||||||
|
done();
|
||||||
|
}).catch((err: Error) => {
|
||||||
|
fail(err);
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not call ModuleLoader when deepLinkConfig missing', (done: Function) => {
|
||||||
|
spyOn(moduleLoader, 'load').and.returnValue(Promise.resolve());
|
||||||
|
|
||||||
|
config.set('preloadModules', true);
|
||||||
|
let promise = setupPreloadingImplementation(config, null, moduleLoader);
|
||||||
|
promise.then((response) => {
|
||||||
|
expect(moduleLoader.load).not.toHaveBeenCalled();
|
||||||
|
done();
|
||||||
|
}).catch((err: Error) => {
|
||||||
|
fail(err);
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not call ModuleLoader when no low or high priority links', (done: Function) => {
|
||||||
|
spyOn(moduleLoader, 'load').and.returnValue(Promise.resolve());
|
||||||
|
|
||||||
|
config.set('preloadModules', true);
|
||||||
|
const deepLinkConfig: DeepLinkConfig = {
|
||||||
|
links: [{
|
||||||
|
loadChildren: 'offString',
|
||||||
|
priority: 'off'
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
let promise = setupPreloadingImplementation(config, deepLinkConfig, moduleLoader);
|
||||||
|
promise.then((response) => {
|
||||||
|
expect(moduleLoader.load).not.toHaveBeenCalled();
|
||||||
|
done();
|
||||||
|
}).catch((err: Error) => {
|
||||||
|
fail(err);
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call ModuleLoader when has low priority links', (done: Function) => {
|
||||||
|
spyOn(moduleLoader, 'load').and.returnValue(Promise.resolve());
|
||||||
|
|
||||||
|
config.set('preloadModules', true);
|
||||||
|
const deepLinkConfig: DeepLinkConfig = {
|
||||||
|
links: [{
|
||||||
|
loadChildren: 'lowString',
|
||||||
|
priority: 'low'
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
let promise = setupPreloadingImplementation(config, deepLinkConfig, moduleLoader);
|
||||||
|
promise.then((response) => {
|
||||||
|
expect(moduleLoader.load).toHaveBeenCalledWith('lowString');
|
||||||
|
done();
|
||||||
|
}).catch((err: Error) => {
|
||||||
|
fail(err);
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call ModuleLoader when has high priority links', (done: Function) => {
|
||||||
|
spyOn(moduleLoader, 'load').and.returnValue(Promise.resolve());
|
||||||
|
|
||||||
|
config.set('preloadModules', true);
|
||||||
|
const deepLinkConfig: DeepLinkConfig = {
|
||||||
|
links: [{
|
||||||
|
loadChildren: 'highString',
|
||||||
|
priority: 'high'
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
let promise = setupPreloadingImplementation(config, deepLinkConfig, moduleLoader);
|
||||||
|
promise.then((response) => {
|
||||||
|
expect(moduleLoader.load).toHaveBeenCalledWith('highString');
|
||||||
|
done();
|
||||||
|
}).catch((err: Error) => {
|
||||||
|
fail(err);
|
||||||
|
done(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
var moduleLoader: ModuleLoader;
|
var moduleLoader: ModuleLoader;
|
||||||
var ngModuleLoader: NgModuleLoader;
|
var ngModuleLoader: NgModuleLoader;
|
||||||
|
var config: Config;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
ngModuleLoader = mockNgModuleLoader();
|
ngModuleLoader = mockNgModuleLoader();
|
||||||
moduleLoader = mockModuleLoader(ngModuleLoader);
|
moduleLoader = mockModuleLoader(ngModuleLoader);
|
||||||
|
config = mockConfig();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user