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.
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