mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| import { Observable } from 'rxjs';
 | |
| 
 | |
| interface ObservableTester<T> {
 | |
|   observable: Observable<T>;
 | |
|   done: jest.DoneCallback;
 | |
| }
 | |
| 
 | |
| interface SubscribeAndExpectOnNext<T> extends ObservableTester<T> {
 | |
|   expect: (value: T) => void;
 | |
| }
 | |
| 
 | |
| interface SubscribeAndExpectOnComplete<T> extends ObservableTester<T> {
 | |
|   expect: () => void;
 | |
| }
 | |
| 
 | |
| interface SubscribeAndExpectOnError<T> extends ObservableTester<T> {
 | |
|   expect: (err: any) => void;
 | |
| }
 | |
| 
 | |
| export const observableTester = () => {
 | |
|   const subscribeAndExpectOnNext = <T>({ observable, expect, done }: SubscribeAndExpectOnNext<T>): void => {
 | |
|     observable.subscribe({
 | |
|       next: value => {
 | |
|         try {
 | |
|           expect(value);
 | |
|         } catch (err) {
 | |
|           done.fail(err);
 | |
|         }
 | |
|       },
 | |
|       error: err => done.fail(err),
 | |
|       complete: () => done(),
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   const subscribeAndExpectOnComplete = <T>({ observable, expect, done }: SubscribeAndExpectOnComplete<T>): void => {
 | |
|     observable.subscribe({
 | |
|       next: () => {},
 | |
|       error: err => done.fail(err),
 | |
|       complete: () => {
 | |
|         try {
 | |
|           expect();
 | |
|           done();
 | |
|         } catch (err) {
 | |
|           done.fail(err);
 | |
|         }
 | |
|       },
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   const subscribeAndExpectOnError = <T>({ observable, expect, done }: SubscribeAndExpectOnError<T>): void => {
 | |
|     observable.subscribe({
 | |
|       next: () => {},
 | |
|       error: err => {
 | |
|         try {
 | |
|           expect(err);
 | |
|           done();
 | |
|         } catch (err) {
 | |
|           done.fail(err);
 | |
|         }
 | |
|       },
 | |
|       complete: () => {
 | |
|         done();
 | |
|       },
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   return { subscribeAndExpectOnNext, subscribeAndExpectOnComplete, subscribeAndExpectOnError };
 | |
| };
 |