【问题标题】:How to mock Typescript enums without violating type contract如何在不违反类型合同的情况下模拟 Typescript 枚举
【发布时间】:2017-06-15 20:28:55
【问题描述】:

我正在尝试对接受 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 */);
    });
});

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

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

【问题讨论】:

  • 为什么不想使用实际的枚举?测试一个应该得到 enum X 但在测试中会得到 enum Y 的函数是没有意义的
  • @NitzanTomer 你是绝对正确的。在考虑了几分钟后,我得出了同样的结论。我发布了一个答案,解释了为什么我起初认为嘲笑我的枚举是个好主意。

标签: unit-testing typescript mocking jestjs


【解决方案1】:

对这个问题进行了更多的思考,我认为我在这个问题上的方法没有意义。

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

一般来说,我认为使用模拟枚举进行单元测试是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2010-12-13
    • 2012-08-07
    • 2020-07-18
    • 2018-11-21
    相关资源
    最近更新 更多