代理测试不适用于Jasmine

时间:2017-11-13 01:44:58

标签: javascript proxy 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正在正常工作。看起来关于使用代理

的问题是什么

1 个答案:

答案 0 :(得分:1)

对我来说似乎是,你无法正确地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 ); 
    }
  }
})

这意味着,您忘记关闭行new Proxy(中的括号,其次,您在返回对象中丢失了,。您的测试有效cart.push,因为您的cart是一个数组,您可以向其中再注入一个元素,但由于所述问题,cart_proxy无法构建。

另外,我对您的beforeEach

有些疑虑
 beforeEach(function() {
    cartModule.toggleItem("ladder", true)
  })

我认为toggleItemcartModule中的一个函数,它不接收任何参数,但是它已经收到了2个参数。

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