【问题标题】:enzyme's mount fails second time酶的安装第二次失败
【发布时间】:2021-04-26 04:11:25
【问题描述】:

我正在测试一个与 redux 连接的组件。我的组件使用useSelector,所以我使用来自this answer 的一些建议来模拟来自useSelector 的响应,效果很好。这是我的测试:

it("renders consistently and correctly", () => {
  const store = createStore(rootReducer);
  const spy = jest.spyOn(redux, "useSelector");
  spy.mockReturnValue([
    {
      message: "This is a test success message",
      status: "SUCCESS",
    },
  ]);

  const wrapper = mount(
    <Provider store={store}>
      <GlobalSnackbar />
    </Provider>
  );
  expect(wrapper).toMatchSnapshot();
  expect(wrapper.find("SnackbarNotification")).toHaveLength(1);
});

我想将这些测试分成多个it 语句,因为我想针对这个给定的场景测试更多的东西(或者可能来自mockReturnValue 的不同响应)。但是当我尝试将这两个 expect 语句分成 2 个不同的 it 语句时,第二个语句失败,出现以下错误:

Expected length: 1
    Received length: 0
    Received object: {}

      109 |   );
      110 |   expect(wrapper).toMatchSnapshot();
    > 111 |   expect(wrapper.find("SnackbarNotification")).toHaveLength(1);

我尝试复制和粘贴整个测试并一个接一个地运行它。第二个总是失败。我不确定为什么Recieved object 第二次是{}。不应该完全一样吗?我尝试在第一次测试结束时使用wrapper.unmount(),结果没有变化。我需要执行什么样的清理/重置才能使这样的一系列测试正常工作?

【问题讨论】:

    标签: reactjs unit-testing react-redux jestjs enzyme


    【解决方案1】:

    试试这个:

    describe("some tests", () => {
        const store = createStore(rootReducer);
        let spy, wrapper;
    
        after(() => wrapper.unmount());
        afterEach(() => spy.mockRestore()); // Or maybe spy.mockClear()
    
        it("renders consistently and correctly", () => {
          spy = jest.spyOn(redux, "useSelector");
    
          spy.mockReturnValue([
            {
              message: "This is a test success message",
              status: "SUCCESS",
            },
          ]);
    
          wrapper = mount(
            <Provider store={store}>
              <GlobalSnackbar />
            </Provider>
          );
    
          expect(wrapper).toMatchSnapshot();
        });
    
        it("renders consistently and correctly 2", () => {
          spy = jest.spyOn(redux, "useSelector");
    
          spy.mockReturnValue([
            {
              message: "This is a test success message",
              status: "SUCCESS",
            },
          ]);
    
          wrapper = mount(
            <Provider store={store}>
              <GlobalSnackbar />
            </Provider>
          );
    
          expect(wrapper.find("SnackbarNotification")).toHaveLength(1);
        });
    });
    

    现在,在每次测试之后,包装器都被卸载并恢复了 spy,而且现在两个测试的存储区总是相同的。

    【讨论】:

    • 不幸的是,这似乎根本没有任何效果。我尝试了spy.mockClear()spy.mockRestore()wrapper.unmount(),这三者的各种组合,它对我得到的错误没有影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2020-10-02
    • 2011-03-22
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多