You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
| import * as sinon from 'sinon';
 | |
| import * as DataShape from '../../../../ts/data/data';
 | |
| 
 | |
| const globalAny: any = global;
 | |
| const sandbox = sinon.createSandbox();
 | |
| 
 | |
| // We have to do this in a weird way because Data uses module.exports
 | |
| //  which doesn't play well with sinon or ImportMock
 | |
| // tslint:disable-next-line: no-require-imports no-var-requires
 | |
| const Data = require('../../../../ts/data/data');
 | |
| type DataFunction = typeof DataShape;
 | |
| 
 | |
| /**
 | |
|  * Stub a function inside Data.
 | |
|  *
 | |
|  * Note: This uses a custom sandbox.
 | |
|  * Please call `restoreStubs()` or `stub.restore()` to restore original functionality.
 | |
|  */
 | |
| export function stubData<K extends keyof DataFunction>(fn: K): sinon.SinonStub {
 | |
|   return sandbox.stub(Data, fn);
 | |
| }
 | |
| 
 | |
| type WindowValue<K extends keyof Window> = Partial<Window[K]> | undefined;
 | |
| 
 | |
| /**
 | |
|  * Stub a window object.
 | |
|  *
 | |
|  * Note: This uses a custom sandbox.
 | |
|  * Please call `restoreStubs()` or `stub.restore()` to restore original functionality.
 | |
|  */
 | |
| export function stubWindow<K extends keyof Window>(fn: K, value: WindowValue<K>) {
 | |
|   // tslint:disable-next-line: no-typeof-undefined
 | |
|   if (typeof globalAny.window === 'undefined') {
 | |
|     globalAny.window = {};
 | |
|   }
 | |
| 
 | |
|   const set = (newValue: WindowValue<K>) => {
 | |
|     globalAny.window[fn] = newValue;
 | |
|   };
 | |
| 
 | |
|   const get = () => {
 | |
|     return globalAny.window[fn] as WindowValue<K>;
 | |
|   };
 | |
| 
 | |
|   globalAny.window[fn] = value;
 | |
| 
 | |
|   return {
 | |
|     get,
 | |
|     set,
 | |
|   };
 | |
| }
 | |
| 
 | |
| export function restoreStubs() {
 | |
|   globalAny.window = undefined;
 | |
|   sandbox.restore();
 | |
| }
 | |
| 
 | |
| export const stubWindowLog = () => {
 | |
|   stubWindow('log', {
 | |
|     // tslint:disable: no-void-expression
 | |
|     // tslint:disable: no-console
 | |
|     info: (args: any) => console.info(args),
 | |
|     warn: (args: any) => console.warn(args),
 | |
|     error: (args: any) => console.error(args),
 | |
|   });
 | |
| };
 |