应该如何编写代码,以便测试可以在此处访问函数执行的属性:

_instance.addProducts(_product).products

测试

describe(`ONE product added`, () => {
  const _product = {
    name: 'product1',
    price: 1.50,
    quantity: 1
  };
  let _instance
  let _cart

  beforeEach(() => {
    _instance = window[MODULE_NAME]();
    _cart = _instance.addProducts(_product);
  });

  test(`cart's products`, () => {
    expect(_cart.products).toEqual([_product]);
  });
})




(function() {
  var MODULE_NAME = 'shoppingcartModel',
      _Cart = {
        products: [],
        total: {
          beforeVAT: 0,
          afterVAT: 0,
          VAT: 0
        }
      };

  window[MODULE_NAME] = function() {

    return {

      addProducts: function(newOrExistingProducts) {
        return _Cart.products.push(newOrExistingProducts);
      }

    };
  };
})()


该测试编写完美,无法修改。那是什么巫术? :)

我确实尝试将addProducts重构为变量并在其上附加products属性,但这不是这样的方式...

最佳答案

_Cart方法返回addProducts并从返回的_Cart对象获取产品属性

addProducts: function(newOrExistingProducts) {
    _Cart.products.push(newOrExistingProducts);
    return _Cart;
}


编写_instance.addProducts(_product).products时,并不是要从_instance.addProducts获取产品,而是从其返回值中获取产品。

要从_instance.addProducts获得产品,您应该改写_instance.addProducts.products

10-01 03:55