函数执行的访问属性(如doSomething()。cool)

时间:2018-05-31 12:54:21

标签: javascript ecmascript-6 jestjs

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

_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属性,但它不是......

1 个答案:

答案 0 :(得分:2)

_Cart方法返回addProducts并从返回的_Cart对象中获取products属性

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

当您撰写_instance.addProducts(_product).products时,您并非尝试从_instance.addProducts获取产品,而是从其返回值。

要从_instance.addProducts获取产品,您应该写_instance.addProducts.products而不是