You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码使测试可访问函数执行的products属性(测试不可改)

解决购物车addProducts返回值不满足测试需求的问题

我明白你的问题了——测试期望调用addProducts后返回的对象包含products属性,但当前你的实现返回的是Array.push()的结果(也就是添加元素后的数组长度,一个数字),这肯定没法通过测试。另外还有个隐藏问题:原来的_Cart是闭包内的单例,所有通过window[MODULE_NAME]()创建的购物车实例都会共享同一个产品列表,这显然不符合实际购物车的需求。

下面是修复后的完整实现代码:

(function() {
  var MODULE_NAME = 'shoppingcartModel';
  
  window[MODULE_NAME] = function() {
    // 每个实例创建自己的购物车对象,避免共享
    var _cart = {
      products: [],
      total: { beforeVAT: 0, afterVAT: 0, VAT: 0 }
    };
    
    return {
      addProducts: function(newOrExistingProducts) {
        // 执行添加操作
        _cart.products.push(newOrExistingProducts);
        // 返回包含products属性的购物车对象,满足测试的访问需求
        return _cart;
      }
    };
  };
})()

修改说明:

  • 每个实例拥有独立购物车:把_cart的定义移到工厂函数window[MODULE_NAME]()内部,这样每次调用创建购物车实例时,都会生成全新的购物车对象,不会和其他实例共享产品列表。
  • 调整addProducts的返回值:不再返回push的结果,而是返回当前的_cart对象——这个对象本身就带有products属性,完美匹配测试里_cart.products的访问方式。

这样修改后,你的测试代码就能正常通过了:调用_instance.addProducts(_product)会返回包含products数组的购物车对象,expect(_cart.products).toEqual([_product])的断言会成功。

内容的提问来源于stack exchange,提问作者volna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:41:32