JS单元测试中如何在Bartender类方法内实例化Beer类解决测试报错
问题原因
你目前的代码存在3处核心问题,完全不匹配测试用例的预期:
takeOrder方法仅定义了1个形参,但测试用例调用时传入了5个独立参数,分别对应啤酒的厂商、名称、类型、价格、容量- 你在
takeOrder内部重新声明了newOrder变量,直接覆盖了传入的参数,且实例化Beer时没有传入任何参数,不符合Beer构造函数要求传入配置对象的规则 - 实例化的空
Beer对象没有任何符合预期的属性,自然无法通过断言
修改方案
直接修改Bartender类的takeOrder方法即可,修改后代码如下:
class Bartender { constructor(name, hourlyWage){ this.name = name; this.hourlyWage = hourlyWage; this.orders = []; } // 调整形参列表匹配测试传入的参数顺序 takeOrder(brewer, name, type, price, volume) { // 组装Beer构造函数要求的配置对象,实例化后推入orders数组 const newBeer = new Beer({ brewer, name, type, price, volume }); this.orders.push(newBeer); } }
验证说明
修改后重新运行测试即可通过所有断言:
- 生成的实例是
Beer类的实例,符合instanceOf断言要求 orders数组长度为1,符合计数要求- 传入的5个参数都正确赋值到
Beer实例的对应属性,所有属性断言都会通过
内容的提问来源于stack exchange,提问作者Chez G
相关产品推荐
相关产品推荐

