Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模拟(redux存储)对象以在jest中测试js函数_Javascript_Reactjs_Redux_Jestjs - Fatal编程技术网

Javascript 模拟(redux存储)对象以在jest中测试js函数

Javascript 模拟(redux存储)对象以在jest中测试js函数,javascript,reactjs,redux,jestjs,Javascript,Reactjs,Redux,Jestjs,一般来说,我对前端测试是新手,我有一个CartScreen,它与我试图用jest测试的calculateTotalQuantity函数进行反应。从小时开始,我尝试更改cartimes的值(在testclass中创建一个新的cartimes,并指定一些虚拟数量数据)。我试过嘲弄间谍,但没有成功。我根本无法更改cartItems的值。我的尝试是输入一些有价值的数据,并期望calculateTotalQuantity函数的正确输出 这就是我的CartScreen.js的样子: import React

一般来说,我对前端测试是新手,我有一个CartScreen,它与我试图用jest测试的
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。我希望现在能更好地理解…:)就我个人而言,我会从类中删除该方法,然后只传入购物车项目。除此之外,您可以将购物车项目传递给组件,并检查投标书是否正确。你不想嘲笑你正在测试的类——你希望这个类是真实的。