unit-testing - React Router v4 重定向单元测试

标签 unit-testing reactjs react-router

如何在 React Router v4 中对组件进行单元测试? 我尝试使用笑话和 enzyme 对带有重定向的简单组件进行单元测试,但没有成功。

我的组件:

 const AppContainer = ({ location }) =>
  (isUserAuthenticated()
    ? <AppWithData />
    : <Redirect
        to={{
          pathname: "/login",
          state: { from: location }
        }}
      />);

我尝试测试它:

  function setup() {
      const enzymeWrapper = mount(
        <MemoryRouter initialEntries={["/"]}>
          <AppContainer />
        </MemoryRouter>
      );

      return {
        enzymeWrapper
      };
    }

    jest.mock("lib/authAPI", () => ({
      isUserAuthenticated: jest.fn(() => false)
    }));

    describe("AppContainer component", () => {
      it("renders redirect", () => {
        const { enzymeWrapper } = setup();

        expect(enzymeWrapper.find("<Redirect></Redirect>")).toBe(true);
      });
    });

最佳答案

回答我自己的问题。 基本上,我正在对我的组件进行浅层渲染,并验证如果经过身份验证,则渲染重定向组件,否则渲染应用程序组件。 代码如下:

function setup() {
  const enzymeWrapper = shallow(<AuthenticatedApp />);

  return {
    enzymeWrapper
  };
}

describe("AuthenticatedApp component", () => {
  it("renders Redirect when user NOT autheticated", () => {
    authApi.isUserAuthenticated = jest.fn(() => false);
    const { enzymeWrapper } = setup();

    expect(enzymeWrapper.find(Redirect)).toHaveLength(1);
  });

  it("renders AppWithData when user autheticated", () => {
    authApi.isUserAuthenticated = jest.fn(() => true);
    const { enzymeWrapper } = setup();

    expect(enzymeWrapper.find(AppWithData)).toHaveLength(1);
  });
});

关于unit-testing - React Router v4 重定向单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309807/

相关文章:

java - 是否有可能以编程方式生成 JUnit 测试用例和套件?

c# - 如何在不使用存储库模式的情况下对 ASP.NET MVC Controller 进行单元测试

javascript - 如何让一个函数在另一个函数之前执行

javascript - 尝试通过 map 方法渲染两个相邻的 tr 元素时, react 唯一的 key prop 错误

javascript - 如何解决在 react 中设置状态的 promise

reactjs - 从 hashHistory React-router-redux 中删除 queryKey

reactjs - 如何使用 "react-router"创建 NotFoundRoute 组件

c++ - 如何为 Visual Studio C++ 设置单元测试

unit-testing - 按项目分组时,测试显示在测试资源管理器中的 "External"类别下

javascript - 使用 React Router 重定向显示空白页面