码
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个参数.
总之,我建议你清理你的代码.