Skip to content

测试

测试的重要性远超代码发布。如果您的项目完全缺乏测试或测试覆盖率不足,那么每次发布代码时,开发团队都将无法确定是否破坏了现有功能。关于测试充分性的定义需由团队自行决策,但要达到极高的信心指数和开发者的安心感,实现100%的覆盖率(涵盖所有语句和分支)是有效途径。这意味着,除了选择优秀的测试框架之外,团队还必须配合使用优质的覆盖率工具

任何不编写测试的理由均不成立。当前存在众多优秀的JavaScript测试框架,团队可根据需求选择适配的工具。确定框架后,要求每个新增功能模块应当配套对应的测试用例。如果采用测试驱动开发(TDD)模式固然理想,但核心原则在于确保上线新功能或重构旧代码前,确保达成预定的覆盖率指标。

每个测试对应单一概念

反例:

javascript
import assert from "assert";

describe("MomentJS", () => {
  it("handles date boundaries", () => {
    let date;

    date = new MomentJS("1/1/2015");
    date.addDays(30);
    assert.equal("1/31/2015", date);

    date = new MomentJS("2/1/2016");
    date.addDays(28);
    assert.equal("02/29/2016", date);

    date = new MomentJS("2/1/2015");
    date.addDays(28);
    assert.equal("03/01/2015", date);
  });
});

正例:

javascript
import assert from "assert";

describe("MomentJS", () => {
  it("handles 30-day months", () => {
    const date = new MomentJS("1/1/2015");
    date.addDays(30);
    assert.equal("1/31/2015", date);
  });

  it("handles leap year", () => {
    const date = new MomentJS("2/1/2016");
    date.addDays(28);
    assert.equal("02/29/2016", date);
  });

  it("handles non-leap year", () => {
    const date = new MomentJS("2/1/2015");
    date.addDays(28);
    assert.equal("03/01/2015", date);
  });
});