2017-09-12 2 views
0

Ich habe eine einfache Typoskript Klasse (in meinem Ionic Anwendung) importiert, die ein einfaches „getippt“ Wörterbuch implementiert ...Jasmin - wie man Einheit testen eine Typoskript-Klasse, die eine andere Klasse mit statischen Methoden

import { Utils } from './utils'; 

export class Dictionary<T> { 
    constructor(private noCase?: boolean, init?: Array<{ key: string; value:T; }>) { 
    .... 
    } 
} 

ich habe einige sehr einfache Tests für sie geschrieben ...

import { Dictionary } from './dictionary'; 

    let dictionary : Dictionary<string> = null; 
    describe('Dictionary',() => { 
     beforeEach(() => { 
      dictionary = new Dictionary<string>(true, []); 
     }); 

     it('should have containsKey find a value added',() => { 
      dictionary.add("a", "A Val"); 
      let exists = dictionary.containsKey("a"); 
      expect(exists).toBeTruthy() 
     }); 
    }); 

Wenn ich den Test ausführen, ich die folgende Fehlermeldung erhalten ...

 Chrome 60.0.3112 (Windows 10 0.0.0) ERROR 
     Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_3__dictionary__.a is not a constructor 
     at webpack:///src/shared/utils.ts:19:17 <- test-config/karma-test-shim.js:77758 
    Chrome 60.0.3112 (Windows 10 0.0.0) ERROR 
     Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_3__dictionary__.a is not a constructor 
     at webpack:///src/shared/utils.ts:19:17 <- test-config/karma-test-shim.js:77758 
    Chrome 60.0.3112 (Windows 10 0.0.0): Executed 0 of 0 ERROR (0.422 secs/0 secs) 
    webpack: Compiling... 

Mein Problem ist die Utils Klasse, die ich in der Klasse haben getestet werden (die Dictionary)

Diese Utils Klasse nur eine Reihe von statischen "utils" Methoden hat, (string vergleicht, Formatierung, etc)

import * as moment from 'moment'; 
    import 'moment-duration-format'; 
    import * as _ from 'lodash'; 
    import { TranslateService } from 'ng2-translate'; 
    import { Dictionary } from './dictionary'; 
    ..... 


    export class Utils { 
     public static guard(obj: any, name: string): void { 
     if (obj == null || obj == undefined) 
      throw (name + " must not be null!"); 
     } 

     public static guardS(s: string, name: string): void { 
     if (this.isNullorEmptyOrWhiteSpace(s)) 
      throw (name + " must not be null or empty!"); 
     } 

     ... etc 
     } 

das einzige, was ich in der Dictionary Klasse verwenden, aus dem den Utils ist die statischen guard Verfahren (das ist oben gezeigt).

Gibt es eine Weise, die ich meine Klasse testen, die diese andere Klasse mit den statischen Methoden beinhalten? Kann ich die statischen Methoden dieser Klasse verspotten?

Während die obige Klasse trivial ist, habe ich andere Sachen, die ich testen möchten, dass auch diese statische Utils Klasse umfasst.

Vielen Dank im Voraus für Anregungen.

Antwort

0

Ja, können Sie einen Spion hinzufügen die Wache Methode in Utils Klasse zu verspotten.

spyOn(Utils, 'guard').and.returnValue(true); 
+0

Vielen Dank dafür. Mein tatsächliches Problem war ein bisschen eine zirkuläre Referenz, ich referenzierte die getestete Klasse in der importierten statischen Klasse, dh ich hatte Import {Dictionary} von './dictionary'; in der Utils-Klasse – peterc

Verwandte Themen