测试
测试的重要性远超代码发布。如果您的项目完全缺乏测试或测试覆盖率不足,那么每次发布代码时,开发团队都将无法确定是否破坏了现有功能。关于测试充分性的定义需由团队自行决策,但要达到极高的信心指数和开发者的安心感,实现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);
});
});