JavaScript单元测试报错:Bartender类无法正确实例化Beer类
问题排查与修复方案
核心错误点
- 参数接收与覆盖问题:测试用例调用
takeOrder时传入了5个独立参数(酒厂名、啤酒名、啤酒类型、价格、容量),但你当前的takeOrder方法仅定义了1个形参,且内部直接用var newOrder = new Beer覆盖了外部传入的参数值,导致传入的订单参数完全丢失。 - Beer实例化参数不匹配:
Beer类的构造函数要求传入一个包含brewer/name/type/price/volume属性的对象参数,但你实例化Beer时没有传入任何参数,就算没有参数覆盖问题,也无法生成属性符合要求的Beer实例。
修复后的代码
只需要修改Bartender类的takeOrder方法即可:
class Bartender { constructor(name, hourlyWage){ this.name = name; this.hourlyWage = hourlyWage; this.orders = []; } // 修改参数列表,匹配测试用例的传参顺序 takeOrder(brewer, name, type, price, volume) { // 按Beer构造函数要求组装参数对象 const beerConfig = { brewer, name, type, price, volume }; // 传入参数实例化Beer const newBeer = new Beer(beerConfig); this.orders.push(newBeer); } }
报错原因说明
你看到的expected 'Grand Teton Brewing' to be an instance of Beer报错,本质是你之前的代码逻辑完全没有正确处理传入的参数,错误地把字符串参数直接存入了orders数组(或是参数覆盖后生成的空Beer实例属性不匹配导致的断言连锁报错),修复后即可通过全部测试用例。
内容的提问来源于stack exchange,提问作者andrew c
相关产品推荐
相关产品推荐

