代码
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
正在正常工作。看起来关于使用代理
答案 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)
})
我认为toggleItem
是cartModule
中的一个函数,它不接收任何参数,但是它已经收到了2个参数。
总之,我建议你清理你的代码。