应该如何编写代码,以便测试可以在此处访问函数执行的属性:_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
属性,但这不是这样的方式... 最佳答案
从_Cart
方法返回addProducts
并从返回的_Cart
对象获取产品属性
addProducts: function(newOrExistingProducts) {
_Cart.products.push(newOrExistingProducts);
return _Cart;
}
编写
_instance.addProducts(_product).products
时,并不是要从_instance.addProducts
获取产品,而是从其返回值中获取产品。要从
_instance.addProducts
获得产品,您应该改写_instance.addProducts.products