Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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 如何在ComponentDidMount-React+;打字脚本+;开玩笑+;酶 应用程序_Javascript_Reactjs_Typescript_Jestjs - Fatal编程技术网

Javascript 如何在ComponentDidMount-React+;打字脚本+;开玩笑+;酶 应用程序

Javascript 如何在ComponentDidMount-React+;打字脚本+;开玩笑+;酶 应用程序,javascript,reactjs,typescript,jestjs,Javascript,Reactjs,Typescript,Jestjs,该应用程序是一个简单的待办事项列表。此应用程序从中获取TODO 我想做什么 测试在App.tsx中的ComponentDidMount中执行的API调用 我想模拟API调用并返回一个包含两项的列表。然后检查数组或状态中是否有两项 哪些文件对您很重要? App.tsx(待测试组件) ToDoList.test.tsx(包含测试函数) 简化App.tsx的一小部分 类应用程序扩展组件{ 公共状态:IState={ 项目:[], 数值:5, deleteItemParent:this.deleteIt

该应用程序是一个简单的待办事项列表。此应用程序从中获取TODO

我想做什么 测试在App.tsx中的ComponentDidMount中执行的API调用

我想模拟API调用并返回一个包含两项的列表。然后检查数组或状态中是否有两项

哪些文件对您很重要?
  • App.tsx(待测试组件)
  • ToDoList.test.tsx(包含测试函数)
  • 简化App.tsx的一小部分
    类应用程序扩展组件{
    公共状态:IState={
    项目:[],
    数值:5,
    deleteItemParent:this.deleteItemParent
    };
    getAllTodos=async()=>{
    待命(
    `https://jsonplaceholder.typicode.com/todos?&_limit=${this.state.value}`
    )
    .then((response)=>response.json())
    。然后((json)=>{
    this.setState({items:json})
    });
    };
    componentDidMount(){
    这个。getAllTodos();
    }
    componentDidUpdate(prevProps:any,prevState:any){
    //如果状态更改,则更新todo
    if(prevState.value!==此.state.value){
    这个。getAllTodos();
    }
    }
    render(){
    返回(
    

    要使其正常工作,您必须改变以下几点:

    • 当您的组件装入时,您忘记触发获取笔记,方法是将其置于
      componentDidMount
    componentDidMount(){
    这个。getAllTodos();
    }
    
    • 正如您所说,数据响应是不是文字对象的列表,因此您必须使用
      todos
      属性更改返回数组而不是文字对象的模拟。但为了确保它运行良好,我们必须在每次之前移动
    
    在每个之前(()=>{
    global.fetch=jest.fn(()=>
    承诺,决心({
    json:()=>Promise.resolve([//在此处作为数组返回
    {
    标题:“Todo1”,
    已完成:false
    },
    {
    标题:“Todo2”,
    已完成:false
    }
    ])
    })
    )作为玩笑。嘲笑
    
    嘿,非常感谢!但它仍然不起作用:(.我确实忘记添加componentDidMount函数。项的状态应该是json,因为如果我添加了项:json,实际应用程序会工作。我在状态中收到TODO,并且项显示在屏幕上。我还在测试文件中添加了延迟,但测试失败。预期:2收到:0。我在帖子中编辑了代码:)。我还尝试了wait的outcommented行。你还有什么想法吗?如果数据返回正确的东西,你模拟的数据可能是错误的,应该是数组而不是文字对象。我编辑了答案以指出正确的mock。抱歉,我反应太晚了,我会尝试更快地响应。我按照你说的编辑了代码,但仍然没有我注意到我收到了另一个错误:“TypeError:无法读取未定义的'then'属性”.我在我的帖子中编辑了一个屏幕截图。我为你删除了复制的链接你好!哈哈,我喜欢你知道我有一个问题;p.我有一个问题。我正在尝试测试一个组件。我的意思是使用React Testing Library和Jest btw。如果你有时间回答,那就太好了:p.这是问题的stackoverflow链接: