如何在 TypeScript 单元测试中参数化测试用例?

How do I parameterize test cases in TypeScript unit tests?

我通过了一个简单的单元测试:

describe("Example", () => {
    it("Return digits or empty string", () => {
        let actual = SmokeTest.ProblemOne("1");
        assert.equal(actual, "1");
    })
})

我现在想测试许多其他情况(空字符串、更复杂的输入和边缘情况)。我有 read about how to implement fixtures in TypeScript 但这对于 test-input, expected-output 值的数组来说似乎有点矫枉过正。

在 TypeScript/Mocha 中定义这样一个数组的惯用方法是什么?

您可以只创建一个可以重复使用的函数。

function assertProblemOne(input: string, expected: string): void {
    let actual = SmokeTest.ProblemOne(input);
    assert.equal(expected, actual);
}

describe("Example", () => {
    it("Return digits or empty string", () => {
        assertProblemOne("input here", "expected result here")
    })
})

但是,我不确定这真的比简单好得多。

assert.equal(SmokeTest.ProblemOne("1"), "1");

唯一比调试代码更糟糕的是调试测试。因此,除非在测试之间共享大量代码,否则我建议让每个测试中运行的代码在结构上尽可能简单。

From the Mocha documentation:

No special syntax is required... to parameterize tests [you can] generate them with a closure.

describe("Example", () => {

    // define a closure that calls the method we are testing
    const testProblemOne = ({arg, expected}) =>
        function () {
            const actual = SmokeTest.ProblemOne(arg);
            assert.equal(actual, expected);
        }

    // invoke the closure for each test case
    it("Empty returns empty", testProblemOne({arg: "", expected: ""}));
    it("Single digit identity", testProblemOne({arg: "1", expected: "1"}));
    // additional test cases here...
})

此技术避免使用 foreach 以提高可读性和更广泛的 IDE 集成。