【问题标题】:Cannot test redirecting in react router with enzyme无法使用酶在反应路由器中测试重定向
【发布时间】:2020-10-06 05:15:03
【问题描述】:

我正在尝试使用酶测试我的应用程序中的重定向按钮。

我不确定具体如何执行此操作,但我认为我只需要对包含在 <Link> 中的按钮执行“单击”事件。 (我将其命名为 takeMeToB)。见下文:

import React from 'react';
import Enzyme, {mount} from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import {BrowserRouter as Router, Link, MemoryRouter, Route, Switch} from 'react-router-dom';
import {createMemoryHistory} from "history";

Enzyme.configure({adapter: new Adapter()});

const history = createMemoryHistory();

describe('Routing test', () => {
    let wrapper;

    beforeEach(() => {
        wrapper = mount(
            <MemoryRouter history={history} initialEntries={['/A']}>
                    <div className={"Test"}>This is my Test Component and should not have any test specific code in it
                        <Router>
                            <Switch>
                                <Route path={"/A"}>
                                    <div className={"A"}>A</div>
                                    <Link to={"/B"}>
                                        <button className={"takeMeToB"}>
                                            Take me to B!!
                                        </button>
                                    </Link>
                                </Route>
                                <Route path={"/B"}>
                                    <div className={"B"}>B</div>
                                </Route>
                            </Switch>
                        </Router>
                    </div>
                </MemoryRouter>
        );
    });


    it('test redirect', () => {

        expect(wrapper.find(".Test")).toHaveLength(1);

        expect(wrapper.find(".A")).toHaveLength(1);
        expect(wrapper.find(".B")).toHaveLength(0);

        wrapper.find(".takeMeToB").at(0).simulate('click');

        expect(wrapper.find(".A")).toHaveLength(0);
        expect(wrapper.find(".B")).toHaveLength(1);
    });

    afterEach(() => {
        wrapper.unmount();
    });
});

我的测试的第一部分有效。它找到了 A,但没有找到 B。但是在单击之后,“B”路由应该在 DOM 中可见,而不是 A。这就是我的测试失败的地方。

注意:路由器 (BrowserRouter) 在我的 __mocks__ 文件夹中被模拟出来。您可以有效地忽略它。

【问题讨论】:

    标签: reactjs react-router jestjs enzyme


    【解决方案1】:
    【解决方案2】:

    看来我需要 { button: 0 } 作为酶的参数:

    it('matches snapshot', () => {
    
        expect(wrapper.find(".Test")).toHaveLength(1);
    
        expect(wrapper.find(".A")).toHaveLength(1);
        expect(wrapper.find(".B")).toHaveLength(0);
    
        wrapper.find('.takeMeToB').simulate('click', { button: 0 });
    
        expect(wrapper.find(".A")).toHaveLength(0);
        expect(wrapper.find(".B")).toHaveLength(1);
    });
    

    不知道为什么会这样,但是我在查看一些类似的问题时遇到了它。

    【讨论】:

    • 当我写我的答案时,你已经发布了你的答案:) 无论如何 - 我的链接中有一个解释“为什么”的链接
    猜你喜欢
    • 2017-05-22
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2018-03-20
    • 2017-12-14
    • 2014-10-22
    相关资源
    最近更新 更多