代码之家  ›  专栏  ›  技术社区  ›  Matthew

JavaScript单元测试子任务

  •  0
  • Matthew  · 技术社区  · 6 年前

    他们说:

    换句话说,你应该关心最终的结果,而不是它是如何完成的( ).

    测试 私人职能 ,而只是公开的公共接口。但我的问题是。。。

    考虑以下函数 calculateDiscountedPrice 让我们假设第一个函数是公共可用的(假设导出默认值),其他3个是私有的。

    // PUBLIC TOP-LEVEL FUNCTION
    export default function calculateDiscountedPrice(price, discount) {
        const dollarsOff = getDollarsOff(price, discount);
        return round(price - dollarsOff);
    }
    
    // PRIVATE SUBTASK
    function getDollarsOff(price, discount) {
        return price * discount;
    }
    
    // PRIVATE SUBTASK
    function round(number, precision = 2) {
        return isInt(number) 
        ? number
        : number.toFixed(precision);
    }
    
    // PRIVATE SUBTASK
    function isInt(number) {
        return number % 1 === 0;
    }
    

    用法示例:

    console.log(calculateDiscountedPrice(100, 0.75)) // 25
    

    计算折旧价格 是我们要公开的公共函数,所以我们应该对此进行单元测试。但是其他三个子任务呢?我们为什么不测试一下呢?这些测试包括 计算折旧价格

    1 回复  |  直到 6 年前
        1
  •  2
  •   falinsky Giri Dharan    6 年前

    你说得对,你不应该单独测试私有函数。

    当您为公开可用的代码编写测试时,您应该考虑尽可能多的代码分支,这样您的测试也会涉及所有私有函数。

    此外,严格地说,您不需要为所有公开可用的函数编写测试,否则您也将测试实现。

    因此,对于这个特定的示例,您可以编写如下测试:

    • 通过 price 一个整数,比如 10 通过调用 isInt
    • 价格 不是整数,比如 7.35 通过调用 存在
    • 过零 discount
    • 传递非零 折扣

    TDD 技术从一开始的变化是你基本上得到了这些测试用例。

    article 是著名的软件工程专家鲍勃叔叔的名字。

    推荐文章