Введение в тест
Мне дали модуль для работы, чтобы он прошел прилагаемый тест 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]);
});
})
Ожидаемое значение будет: [{"name": "product1", "price": 1.5, "quantity": 2}]
Реализация модуля вбраузер (работает)
function CartModule() {
var _Cart = {
total: {
beforeVAT: 0,
afterVAT: 0,
VAT: 0
},
products: [],
VATRate: null
};
var _getCart = function() {
return {
total: _Cart.total,
products: _Cart.products
};
};
var _updateTotalPrice = function() {
let invoice = _Cart.total;
invoice.beforeVAT = 0;
invoice.afterVAT = 0;
invoice.VAT = 0;
let roundDecimals = number => +number.toFixed(2);
_Cart.products.forEach(product => {
invoice.beforeVAT = roundDecimals(
product.price * product.quantity + invoice.beforeVAT
);
});
invoice.VAT = roundDecimals(_Cart.total.beforeVAT / 100 * _Cart.VATRate);
invoice.afterVAT = invoice.VAT + invoice.beforeVAT;
};
return {
init: function(VATRate) {
return (_Cart.VATRate = VATRate || 0);
},
getCart: _getCart,
addProducts: function(recievedProducts) {
let products = Array.from(arguments),
updatedProduct,
cartProducts = _getCart().products,
existingProduct;
products.forEach(product => {
existingProduct = cartProducts.findIndex(
existing => existing.name === product.name
);
if (existingProduct >= 0) {
updatedProduct = cartProducts[existingProduct];
updatedProduct.quantity++;
cartProducts[existingProduct] = updatedProduct;
} else {
updatedProduct = product;
updatedProduct.quantity = 1;
cartProducts.push(product);
}
});
// Update Total Price
_updateTotalPrice();
return _getCart();
},
changeProductQuantity: function(product, newQuantity) {
let products = _Cart.products,
productIndex = products.findIndex(
existing => existing.name === product.name
);
products[productIndex].quantity = +newQuantity;
_updateTotalPrice();
return _getCart();
},
removeProducts: function(product) {
let products = _Cart.products,
productIndex = products.findIndex(
existing => existing.name === product.name
);
products.splice(productIndex, 1);
_updateTotalPrice();
return _getCart();
},
destroy: function() {
/* Module = null */
}
};
}
var shoppingCart = CartModule(),
_product = {
name: 'product1',
price: 1.50,
quantity: 1
};
shoppingCart.init(20);
shoppingCart.addProducts(_product, _product)
console.log(shoppingCart.getCart().products)
Jest-тестирование
Но в средах тестирования все по-другому.Кроме того, вывод ошибок версии sandbox
и local
различен:
Локальная версия
Expected value to equal:
[{"name": "product1", "price": 1.5, "quantity": 2}]
Received:
[{"name": "product1", "price": 1.5, "quantity": 1}, {"0": {"name": "product1", "price": 1.5, "quantity": 1}, "1": {"name": "product1", "price": 1.5, "quantity": 1}, "quantity": 1}]
В то время как вывод версии песочницы:
Expected value to equal:
[{"name": "product1", "price": 1.5, "quantity": 2}]
Received:
[{"0": {"name": "product1", "price": 1.5, "quantity": 1}, "1": {"name": "product1", "price": 1.5, "quantity": 1}, "quantity": 1}]
Среды тестирования
Рабочая среда песочницы
PS : Я буду очень признателен, если вы посмотрите и объясните, что я сделал не так в этом пункте, или что также может быть не так?