javascript继承单元测试核心是验证继承关系是否按预期生效,包括实例属性、原型方法、instanceof判断、constructor指向及边界行为(如引用类型隔离、参数传递),需针对不同继承方式设计专项断言。

JavaScript 继承机制的单元测试,核心不是测“语法是否写对”,而是验证继承关系是否按预期生效——包括实例属性、原型方法、instanceof 判断、constructor 指向,以及关键边界行为(如引用类型是否隔离、参数是否正确传递)。下面从实际可落地的角度说明怎么做断言。
验证实例属性与构造函数调用逻辑
重点检查子类实例是否拥有父类构造函数中初始化的属性,且引用类型不被共享。
- 用
expect(child1.name).toBe('Tom')断言实例属性被正确赋值 - 对引用类型(如数组、对象)分别修改两个子类实例,再断言彼此独立:
child1.colors.push('green'); expect(child2.colors).not.toContain('green'); - 若使用
Parent.call(this, ...),确保父类构造函数被调用一次(可用jest.fn()或手动打桩验证调用次数)
验证原型链方法可访问且未污染
确认子类实例能调用父类原型上的方法,同时不意外覆盖或丢失自身方法。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 断言方法存在且可执行:
expect(typeof child.sayName).toBe('function'); child.sayName(); - 验证方法调用时
this指向正确(例如输出应为子类实例的name,而非undefined或父类默认值) - 若子类重写了同名方法,确保调用的是子类版本:
expect(child.toString()).toBe('[object Child]');
验证 instanceof 和 constructor 正确性
这是判断继承关系是否成立最直接的运行时证据。
expect(child).toBeInstanceOf(Child);-
expect(child).toBeInstanceOf(Parent);(对原型链继承或组合继承必须为 true) -
expect(child.constructor).toBe(Child);(注意:若没手动修复constructor,此断言会失败) - 对 ES6
class,还可加:expect(Child.__proto__).toBe(Parent);(静态继承)
针对不同继承方式的专项断言
不同实现有不同脆弱点,需针对性覆盖。
-
原型链继承:必测引用类型共享问题,如
child1.arr === child2.arr应为true(是缺陷,但要明确暴露) -
构造函数继承:必测原型方法缺失,如
expect(child.getParentValue).toBeUndefined(); - 组合继承 / 寄生组合式:重点断言父类构造函数只被调用一次(避免重复初始化),可用计数器或 mock 验证
-
ES6 class + extends:必须含
super()调用,否则构造函数抛错;断言new Child() instanceof Parent和Child.prototype.__proto__ === Parent.prototype
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










