我正在尝试在typescript中编写导出函数的单元测试,如下所示:
module mainStream.utilities {
"use strict";
export function getSpriteClassFromDataType(type: string): string {
var retClass: string = "";
if (type) {
switch (type.toString()) {
case "1":
retClass = "text";
break;
case "2":
retClass = "number";
break;
case "3":
retClass = "yesno";
break;
case "4":
retClass = "datetime";
break;
case "9":
retClass = "decimal";
break;
case "10":
retClass = "xml";
break;
default:
retClass = "text";
}
}
return retClass;
}
}
这是一个非常简单的函数,用于从整数字符串(“1”)=“text”中获取文本值;代码不是最好的方法,因为Enum很可能已经工作了,我只是想为此编写一个简单的测试。
这就是我所拥有的,但是Karma抱怨“obj”部分并且因为它不在类中,所以我也不能使用命名空间(模块名称)作为对象。
/// <reference path="../../../mainStreamApp/utilities/datatypeclassresolver.ts" />
namespace unit.tests.utilities {
"use strict";
describe("mainStreamApp.utilities", () => {
describe("DataTypeClassResolver", () => {
it("should return the sprite class name for a text data type", () => {
spyOn(mainStreamApp.utilities, "mainStreamApp.utilities.getSpriteClassFromDataType");
let dataType = mainStreamApp.utilities .getSpriteClassFromDataType("1");
expect(mainStreamApp.utilities.getSpriteClassFromDataType).toHaveBeenCalledWith("1");
expect(dataType).toBe("text");
});
});
})
}
有没有一种特殊的方法可以做到这一点,而不必将该函数包装在一个类中?
答案 0 :(得分:1)
spyOn
和方法调用期望在这里是多余的。只需调用方法并验证结果:
it("should return the sprite class name for a text data type", () => {
let dataType = mainStreamApp.utilities.getSpriteClassFromDataType("1");
expect(dataType).toBe("text");
});