Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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/26.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 如何使用<;路由器>;里面有标签吗?_Javascript_Reactjs_React Router_React Testing Library - Fatal编程技术网

Javascript 如何使用<;路由器>;里面有标签吗?

Javascript 如何使用<;路由器>;里面有标签吗?,javascript,reactjs,react-router,react-testing-library,Javascript,Reactjs,React Router,React Testing Library,关于: 嘿,现在我正在尝试用jest和我的react组件的react测试库编写测试。我也使用react路由器 问题: 我想检查当路径发生变化而没有与单个组件交互时,应用程序是否路由到正确的组件 例如,如果当前路径名为“/impressum”,我只想从impressum页面获得一个快照 我不知道如何将路径传递到 我还尝试包装 我还尝试用from->import{Router}from“react Router dom”包装组件;并推送历史对象 我的基本测试代码 下面您可以看到我用于测试的代码,我在

关于:

嘿,现在我正在尝试用jest和我的react组件的react测试库编写测试。我也使用react路由器

问题:

我想检查当路径发生变化而没有与单个组件交互时,应用程序是否路由到正确的组件

例如,如果当前路径名为“/impressum”,我只想从impressum页面获得一个快照

我不知道如何将路径传递到

  • 我还尝试包装

  • 我还尝试用
    from->import{Router}from“react Router dom”包装
    组件;并推送历史对象

  • 我的基本测试代码

    下面您可以看到我用于测试的代码,我在测试时做了一些更改,但这一基本部分一直保留着

    describe("snapshot-test", () => {
        it("renders component", () => {
            const { asFragment } = render(
                <App></App>
            )
    
            expect(asFragment()).toMatchSnapshot()
        })
    })
    
    description(“快照测试”),()=>{
    它(“呈现组件”,()=>{
    const{asFragment}=render(
    )
    expect(asFragment()).toMatchSnapshot()
    })
    })
    
    我认为您需要像这样在“/”的路径前面加上exact

    <Switch>
          <Route path="/weatherDetails" component={WeatherDetailsPage} />
          <Route path="/addWeather" component={AddWeatherPage} />
          <Route path="/deleteWeather" component={DeleteWeatherPage} />
          <Route path="/impressum" component={ImpressumPage} />
          <Route exact path="/" component={WeatherPage} />
    </Switch>
    
    
    
    这意味着,只有当你有这个路径=“/”的天气页面显示你添加到它像路径=“/impersum”你会看到只有impersupage。
    希望它能帮助你:)

    我刚刚找到了一个解决方案

    我不得不把路由器模拟成一个div,并包含它的子代码。 其工作方式如下:

    您需要包含以下代码的文件夹
    \uuuuumocks\uuuu/react router dom.js

    import React from 'react';
    
    const reactRouterDom = require("react-router-dom")
    reactRouterDom.BrowserRouter = ({children}) => <div>{children}</div>
    
    module.exports = reactRouterDom
    
    同时访问下面的链接,我从那里得到了解决方案。

    谢谢您的快速回答。不幸的是,它不起作用。此外,如果您不使用
    确切的
    ,路线最后会列出(这里的顺序很重要)。然后“/”路径将捕获不包括其他路径之一的所有内容。因此,当
    首先写入时,每条路线都会显示在WeatherPage上。但是当它最后写入时,不是确切路径“/weatherDetails”、“/addWeather”等的所有内容都会显示WeatherPage组件。我认为我的代码无法工作,因为标签。RTL中是否有任何方法可以禁用react组件中的生命周期方法。因为当我这样做的时候,这些方法就会被执行。!我需要不必要地嘲笑所有人@Benjamin@SakthiSureshAnand不幸的是,我不知道Sry:/
    import React from 'react';
    
    const reactRouterDom = require("react-router-dom")
    reactRouterDom.BrowserRouter = ({children}) => <div>{children}</div>
    
    module.exports = reactRouterDom
    
    import React from "react";
    import { render } from "@testing-library/react";
    import { MemoryRouter } from 'react-router-dom';
    import App from './App';
    
    
    describe("unit-test", () => {
        it("renders the right component with following path '/impressum'", () => {
            const { getByTestId } = render(
                <MemoryRouter initialEntries={['/impressum']}>
                    <App></App>
                </MemoryRouter>
            )
    
            let impressumPage = getByTestId("impressum-page")
    
            expect(impressumPage).toBeInTheDocument()
        })
    })