Javascript 根据测试环境的不同,测试模块会产生不同的输出

Javascript 根据测试环境的不同,测试模块会产生不同的输出,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,测试介绍 我已经得到了一个模块来使用,所以它通过了附加的Jest测试。目前,我坚持以下测试规则: describe(`TWO TIMES the SAME product ADDED`, () => { const _VATRate = 20; const _product = { name: 'product1', price: 1.50, quantity: 1 }; let _instance; let _cart; beforeEa

测试介绍

我已经得到了一个模块来使用,所以它通过了附加的Jest测试。目前,我坚持以下测试规则:

describe(`TWO TIMES the SAME product ADDED`, () => {
  const _VATRate = 20;
  const _product = {
    name: 'product1',
    price: 1.50,
    quantity: 1
  };
  let _instance;
  let _cart;

  beforeEach(() => {
    _instance = window[NAMESPACE][MODULE_NAME]();
    _instance.init(_VATRate);

    _cart = _instance.addProducts([_product, _product]);
  });

  test(`cart's products`, () => {
    const result = Object.assign({}, _product, {'quantity': 2});
    expect(_cart.products).toEqual([result]);
  });
})
预期值为:
[{“名称”:“产品1”,“价格”:1.5,“数量”:2}]



在浏览器中实现模块(工作)

功能模块(){
var\u Cart={
总数:{
增值税前:0,
税后增值税:0,
增值税:0
},
产品:[],
VATRate:null
};
var_getCart=function(){
返回{
总计:_Cart.total,
产品:_Cart.products
};
};
var_updateTotalPrice=函数(){
让发票=_Cart.total;
增值税前发票=0;
发票。增值税后=0;
发票增值税=0;
设roundDecimals=number=>+number.toFixed(2);
_Cart.products.forEach(产品=>{
VAT前发票=整数小数(
产品.价格*产品.数量+发票.增值税前
);
});
VAT发票=整数小数(_Cart.total.before VAT/100*_Cart.VATRate);
发票.后增值税=发票.增值税+发票.前增值税;
};
返回{
初始化:函数(VATRate){
返回(_Cart.VATRate=VATRate | | 0);
},
getCart:\u getCart,
addProducts:功能(ReceivedProducts){
让products=Array.from(参数),
更新的产品,
cartProducts=\u getCart()。产品,
现有产品;
products.forEach(产品=>{
existingProduct=cartProducts.findIndex(
existing=>existing.name==product.name
);
如果(现有产品>=0){
updatedProduct=cartProducts[现有产品];
updatedProduct.quantity++;
cartProducts[现有产品]=更新的产品;
}否则{
updatedProduct=产品;
updatedProduct.quantity=1;
推(产品);
}
});
//更新总价
_updateTotalPrice();
返回_getCart();
},
changeProductQuantity:函数(产品、新数量){
让产品=_Cart.products,
productIndex=products.findIndex(
existing=>existing.name==product.name
);
产品[productIndex]。数量=+新数量;
_updateTotalPrice();
返回_getCart();
},
移除产品:功能(产品){
让产品=_Cart.products,
productIndex=products.findIndex(
existing=>existing.name==product.name
);
产品.拼接(产品索引,1);
_updateTotalPrice();
返回_getCart();
},
销毁:函数(){
/*模块=空*/
}
};
}
var shoppingCart=CartModule(),
_产品={
名称:“产品1”,
价格:1.50,
数量:1
};
shoppingCart.init(20);
shoppingCart.addProducts(\u产品,\u产品)

console.log(shoppingCart.getCart().products)
我想应该是这一行:

let products = Array.from(arguments),
这将产生一系列产品阵列,因为这一行:

_cart = _instance.addProducts([_product, _product]);
您可能需要使用以下内容:

addProducts: function(recievedProducts) {
      let products = recievedProducts,
当然,如果您的
addProducts
可以将两个对象都作为数组处理,您可能需要执行以下操作:

addProducts: function(recievedProducts) {
      let products = Array.isArray(recievedProducts) ? receivedProducts : [receivedProducts],