如何在不违反类型合同的情况下模拟Typescript枚举

时间:2017-01-30 15:50:06

标签: unit-testing typescript mocking jest

我试图对接受Enum参数类型的函数进行单元测试,例如像这样的函数。

function consumeEnumValue(value: MyEnumType) {
    //do something
}

但我不想将真正的Enum导入到我的测试代码中,我想使用带有虚构条目的模拟Enum。以下不起作用:

import { consumeEnumValue } from 'production-code.ts'

enum FictionalEnum {
    foo,
    bar,
}

describe('consumeEnumValue', () => {
    it('should run and have no type errors', () => {
        expect(consumeEnumValue(FictionalEnum.foo)).toEqual(/* something */);
    });
});

当然,打字稿抱怨参数类型和参数类型不匹配。

有没有办法模拟具有虚构值的枚举?

1 个答案:

答案 0 :(得分:0)

在更多地考虑这个问题之后,我不认为我在问题中的方法是有道理的。

在我的特定情况下,被测试的函数使用枚举作为一组唯一标识符(防止错误标识符,替代代码中的字符串),但不对任何特定标识符进行操作。例如,没有根据枚举值产生结果的开关案例。相反,它使用枚举值作为键来访问作为第二个参数传递的映射。

一般来说,我认为用模拟枚举进行单元测试是不合理的。