我有一个简单的TypeScript类(在我的Ionic应用程序中),它实现了一个简单的“类型”字典......
import { Utils } from './utils';
export class Dictionary<T> {
constructor(private noCase?: boolean, init?: Array<{ key: string; value:T; }>) {
....
}
}
我为它写了一些非常简单的测试...
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()
});
});
当我运行测试时,我收到以下错误......
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...
我的问题是我正在测试的课程中的Utils
课程(Dictionary
)
这个Utils
类只有一堆静态的“utils”方法,(字符串比较,格式化等)
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
}
我在Dictionary
类Utils
中使用的唯一内容是静态guard
方法(如上所示)。
有没有办法可以使用静态方法测试包含其他类的类?我可以模拟这个类的静态方法吗?
虽然上面的课程很简单,但我还有其他我想测试的东西,还包括这个静态Utils
类。
提前感谢任何建议。
答案 0 :(得分:1)
是的,您可以添加一个间谍来模拟Utils类中的guard方法。
spyOn(Utils, 'guard').and.returnValue(true);