javascript – 代理测试无法在Jasmine中运行

var cartModule = (function() {
  var cart = [];
  var cart_proxy = new Proxy(cart, {
    set: function(target, property, value) {
      ... 
      target[property] = value
      return true
    }
  }

  return {
    toggleItem: function() {
      if (value) {
        cart_proxy.push(new Item(item_name)); 
      }
    }
    getItems: function() {
      return cart.map( object => object.name ); 
    }
  }
})

规格

describe("when toggleitem is called", function() {
  beforeEach(function() {
    cartModule.toggleItem("ladder", true)
  })
  it ('adds item', function() {
    expect(cartModule.getItems()).toEqual(["ladder"]);
  })
})

如果代码表示cart_proxy.push,则规范失败,但如果代码表示cart.push规范通过则.在控制台中,我可以确认cart_proxy.push是否正常工作.看起来失败是关于使用代理的事情

最佳答案 对我来说似乎是,你无法正确制作cart_proxy,这是你测试失败的主要原因.此外,您的测试可能会遇到一些问题.

你有语法错误.正确的一个在下面:

var cartModule = (function() {
  var cart = [];
  var cart_proxy = new Proxy(cart, {
    set: function(target, property, value) {

      target[property] = value
      return true
    }
  })

  return {
    toggleItem: function() {
      if (value) {
        cart_proxy.push(new Item(item_name)); 
      }
    },
    getItems: function() {
      return cart.map( object => object.name ); 
    }
  }
})

这意味着,你忘了关闭新代理行中的括号(其次,你在返回对象中丢失了一个.你的测试工作,使用cart.push,因为你的购物车是一个数组,你可以再注入一个元素进入它,但由于所述问题,无法构造cart_proxy.

另外,我对你的beforeEach有一些担忧:

 beforeEach(function() {
    cartModule.toggleItem("ladder", true)
  })

我认为toggleItem是cartModule中的一个函数,它不接收任何参数,但在这里它收到了2个参数.

总之,我建议你清理你的代码.

点赞