Javascript 模拟(redux存储)对象以在jest中测试js函数
一般来说,我对前端测试是新手,我有一个CartScreen,它与我试图用jest测试的Javascript 模拟(redux存储)对象以在jest中测试js函数,javascript,reactjs,redux,jestjs,Javascript,Reactjs,Redux,Jestjs,一般来说,我对前端测试是新手,我有一个CartScreen,它与我试图用jest测试的calculateTotalQuantity函数进行反应。从小时开始,我尝试更改cartimes的值(在testclass中创建一个新的cartimes,并指定一些虚拟数量数据)。我试过嘲弄间谍,但没有成功。我根本无法更改cartItems的值。我的尝试是输入一些有价值的数据,并期望calculateTotalQuantity函数的正确输出 这就是我的CartScreen.js的样子: import React
calculateTotalQuantity
函数进行反应。从小时开始,我尝试更改cartimes
的值(在testclass中创建一个新的cartimes
,并指定一些虚拟数量数据)。我试过嘲弄间谍,但没有成功。我根本无法更改cartItems
的值。我的尝试是输入一些有价值的数据,并期望calculateTotalQuantity
函数的正确输出
这就是我的CartScreen
.js的样子:
import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Link } from "react-router-dom";
import { addToCart, removeFromCart } from "../actions/cartActions";
function CartScreen(props){
const cart = useSelector(state => state.cart);
const {cartItems} = cart;
console.log(JSON.stringify(cartItems));
const productId = props.match.params.id;
const qty = props.location.search ? Number(props.location.search.split("=")[1]) : 1;
const dispatch = useDispatch();
const removeFromCartHandler = (productId) => {
dispatch(removeFromCart(productId));
}
function calculateTotalQuantity() {
let totalQty = cartItems.reduce((a, c) => a + parseInt(c.qty), 0);
console.log("QUantity");
console.log(totalQty);
return totalQty
}
我的testclass
如下所示:
import { JsonWebTokenError } from "jsonwebtoken";
import CartScreen from "./CartScreen";
it("calculates total quantity",() => {
const cartItems = [
{
id: 1,
"qty": "3",
},
{
id: 2,
"qty": "4",
},
{
id: 3,
"qty": "6",
},
];
const mockFn = jest.fn(CartScreen);
mockFn();
mockFn.cartItems = cartItems;
console.log("Mockfunktion: ")
console.log(mockFn());
expect(mockFn).toHaveBeenCalled();
expect(mockFn).toEquals(13)
})
很难理解你在尝试什么。您似乎在模拟组件,调用没有属性的组件,再次调用它,并期望组件的返回值为
13
。这里发生了很多事情——退一步,先浏览一些React测试教程可能更有意义。是的,我很抱歉,这有点让人困惑。我想测试CartScreen.js
的calculateTotalQuantity
功能。为此,我尝试使用testclass的cartItem
对象模拟cartItems
的值。因此,在我的主类中,我将有一个新值cartItems
,用cartItems处理它们。reduce
计算totalQty
。对于我的测试对象,该值应该等于13。我希望现在能更好地理解…:)就我个人而言,我会从类中删除该方法,然后只传入购物车项目。除此之外,您可以将购物车项目传递给组件,并检查投标书是否正确。你不想嘲笑你正在测试的类——你希望这个类是真实的。