单元测试打字稿中的导出函数

时间:2016-08-10 10:21:10

标签: typescript karma-jasmine

我正在尝试在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");
            });

        });
    })
}

有没有一种特殊的方法可以做到这一点,而不必将该函数包装在一个类中?

1 个答案:

答案 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");
});