【问题标题】:Access property of function execution (like doSomething().cool)函数执行的访问属性(如 doSomething().cool)
【发布时间】:2018-11-10 11:59:54
【问题描述】:

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

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

【问题讨论】:

    标签: javascript ecmascript-6 jestjs


    【解决方案1】:

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

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

    当您写_instance.addProducts(_product).products 时,您不是试图从_instance.addProducts 获取产品,而是从它的返回值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 2011-03-07
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多