Reactjs 使用jest和react测试库的测试方法

Reactjs 使用jest和react测试库的测试方法,reactjs,jestjs,react-testing-library,Reactjs,Jestjs,React Testing Library,我无法得到答案,在使用jest和react测试库进行react时,如何无法达到功能组件内部的方法 我试过用酶,但我看到所有的都变成了RTL import React from "react"; const simpleComponents = (props) => { const simpleMethod = () =>{ // method logic }; return <h1>test</h1>;

我无法得到答案,在使用jest和react测试库进行react时,如何无法达到功能组件内部的方法

我试过用酶,但我看到所有的都变成了RTL

import React from "react";

const simpleComponents = (props) => {

    const simpleMethod = () =>{ 
        // method logic
    };

    return <h1>test</h1>;
    };
}

export default simpleComponents;
从“React”导入React;
常量simpleComponents=(道具)=>{
const simpleMethod=()=>{
//方法逻辑
};
回归试验;
};
}
导出默认的simpleComponents;

simpleMethod
函数在
simpleComponents
SFC的私有范围内定义。它没有公开,因此无法在
simpleComponents
之外获取函数

但您可以间接测试它,例如:

const simpleMethod=()=>{
log(“方法逻辑”);
};

首先,您需要使用事件来触发它,例如
单击
提交
。我们添加了一个
console.log
方法,因此我们可以监视
console.log
方法,以检查是否调用了
simpleMethod
函数。

simpleMethod
函数是在
simpleComponents
SFC的私有范围内定义的。它没有公开,因此无法在
simpleComponents
之外获取函数

但您可以间接测试它,例如:

const simpleMethod=()=>{
log(“方法逻辑”);
};

首先,您需要使用事件来触发它,例如
单击
提交
。我们添加了一个
console.log
方法,因此我们可以监视
console.log
方法,以检查是否调用了
simpleMethod
函数。

您应该尝试只测试用户在真实浏览器中看到的内容,而不是组件内部逻辑。这就是react测试库所提倡的:编写能够给人信心的测试,因为它们可以看到/做真实用户会做的事情

遵循这些指导原则,您应该尝试构建一个测试,该测试在可见元素(由您的组件呈现)上触发用户交互,并涉及simpleMethod的执行

这就是react测试库查询的全部要点:getByText、getByPlaceholder、getByRole:真实用户会看到的东西,隐藏内部逻辑。但我想你可以用这种方法来处理酶(我从来没有用过酶)

用这种方法编写测试会导致更少的测试,但是更强大的测试,这是一件好事。它与经典的单元测试(例如在Java上下文中)有很大的不同,在这里您可以测试函数、输入、输出


事实上,React组件是一个函数,其输入是用户交互,其输出是DOM。

您应该尝试只测试用户在真实浏览器中看到的内容,而不是组件内部逻辑。这就是react测试库所提倡的:编写能够给人信心的测试,因为它们可以看到/做真实用户会做的事情

遵循这些指导原则,您应该尝试构建一个测试,该测试在可见元素(由您的组件呈现)上触发用户交互,并涉及simpleMethod的执行

这就是react测试库查询的全部要点:getByText、getByPlaceholder、getByRole:真实用户会看到的东西,隐藏内部逻辑。但我想你可以用这种方法来处理酶(我从来没有用过酶)

用这种方法编写测试会导致更少的测试,但是更强大的测试,这是一件好事。它与经典的单元测试(例如在Java上下文中)有很大的不同,在这里您可以测试函数、输入、输出


事实上,您的React组件是一个函数,其输入是用户交互,其输出是DOM。

您到底在测试什么?你能在
simpleMethod
中发布完整的代码吗?问题是我不知道如何在测试中达到组件(simpleMethod)中的方法(simpleMethod),我需要包装该方法进行测试,并获得“expect”的可能结果description(“name”,()=>{it(“name test2”){const wrapperFunctionsimpleMethod=???})是的,我理解。对于类组件,您可以监视类属性/方法。但是,对于功能组件,您不能。因此,您唯一能做的就是测试行为,例如DOM更改或道具(对于那些,您仍然可以监视它们)这就是为什么我要求提供完整的代码,这样我就知道要测试什么了好吧,我想我明白了,只有我能在类组件上获得方法,而不是在函数组件上,我需要了解理论。谢谢你!你到底在测试什么?你能在
simpleMethod
中发布完整的代码吗?问题是我不知道如何才能达到方法(simpleMethod)在组件(simpleMethod)中,在测试中,我需要包装该方法进行测试,并为“expect”description(“name”),()=>{it(“name test2”)获得可能的结果{const wrapperFunctionsimpleMethod=???})是的,我理解。对于类组件,您可以监视类属性/方法。但是,对于函数组件,您不能。因此,您唯一可以做的就是测试行为,例如DOM更改或道具(对于那些,您仍然可以监视它们).这就是为什么我要求提供完整的代码,以便我知道测试什么好的,我想我理解了,只有我能在类组件上获得方法,而不是在函数组件上,我需要了解理论。谢谢!