【发布时间】:2020-02-22 14:46:45
【问题描述】:
我有一个简单的购物车函数,当用户点击增加或减少购物车中商品的数量时,调用 useState 函数来更新购物车状态。
const [cart, setCart] = useState([]);
const onUpdateItemQuantity = (cartItem, quantityChange) => {
const newCart = [...cart];
const shouldRemoveFromCart = quantityChange === -1 && cartItem.count === 1;
...
if (shouldRemoveFromCart) {
newCart.splice(cartIndex, 1);
} else {
...
}
setCart(newCart); //the useState function is called
}
所以开玩笑地说,我有一个函数可以测试用户何时将购物车项目的数量设置为零,但它尚未从购物车中删除该项目,我假设是因为它尚未收到 @ 的结果987654322@:
test('on decrement item from 1 to 0, remove from cart', () => {
const [cartItemToDecrement] = result.current.cartItems;
const productToDecrement = result.current.products.find(
p => p.id === cartItemToDecrement.id
);
act(() => {
result.current.decrementItem(cartItemToDecrement);
});
act(() => {
result.current.decrementItem(cartItemToDecrement);
});
...
expect(result.current.cartItems).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: cartItemToDecrement.id,
count: cartItemToDecrement.count - 2,
inventory: productToDecrement.inventory + 2
})
])
);
});
});
此测试通过,因为购物车现在包含数量已降至零的商品。但实际上它不应该,因为从onUpdateItemQuantity 中的splice 操作我们的cartItems 数组现在根本不应该包含该对象。我如何在我的笑话测试中验证此删除正在发生(反应代码正常工作)。
【问题讨论】:
标签: javascript reactjs unit-testing asynchronous jestjs