javascript - 预计 toHaveBeenCalledWith 不适用于最新的 CreateReactApp 设置

标签 javascript reactjs jestjs create-react-app

我有如下代码,它检查我的命名函数是否已使用某些参数调用:

    const wrapper = mount(<PromotionsContent {...props} />);
    let params = new URLSearchParams();
    params.append('page', 0);
    params.append('size', '20');

    expect(getPromotions).toHaveBeenCalledWith(params);

这里 getPromotions 是一个命名函数,它在测试文件中被正确导入和模拟。这之前工作得很好,但在升级我的应用程序以使用最新的 CreateReactApp(带有 React 16.12.0)之后,它开始崩溃。我还在调用 getPromotions 之前将参数记录到控制台,我实际上可以看到正确的值,但在测试中它只是打印如下并失败:

expect(jest.fn()).toHaveBeenCalledWith(...expected)

    - Expected
    + Received

    - {},
    + {},

    Number of calls: 1

令人惊讶的是,如果我直接使用被调用的参数,如下所示,它会起作用:

    const wrapper = mount(<PromotionsContent {...props} />);
    let params = new URLSearchParams();
    params.append('page', 0);
    params.append('size', '20');

   let calledParams = getPromotions.mock.calls[0][0];
   expect(calledParams.get('page')).toEqual ('0');
   expect(calledParams.get('size')).toEqual ('20');

请问有什么线索吗?

最佳答案

我在使用 16.12.0 全新安装的 React 应用程序上尝试了此操作,并且它正常工作。

你能分享更多你的代码吗?

import React, { useEffect } from "react";
import { render } from "@testing-library/react";
import App from "./App";

const MyComponent = ({ getPromotions }) => {
  useEffect(() => {
    const params = new URLSearchParams();
    params.append("page", "0");
    params.append("size", "0");

    getPromotions(params);
  }, []);
  return null;
};

describe("Lorem Ipsum", () => {
  it("should pass", () => {
    const getPromotionsMock = jest.fn();
    render(<MyComponent getPromotions={getPromotionsMock} />);
    const params = new URLSearchParams();
    params.append("page", "0");
    params.append("size", "0");

    expect(getPromotionsMock).toHaveBeenCalledWith(params);
  });
});

关于javascript - 预计 toHaveBeenCalledWith 不适用于最新的 CreateReactApp 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59744567/

相关文章:

javascript - 我不明白为什么我会陷入无限循环

javascript - jQuery click(function() 不起作用,但普通 Javascript 工作得很好

javascript - React 组件中的 CSS 在新行发生变化

javascript - 如何在 Typescript 中为其子级设置函数 props 类型?类型 TS2339 上不存在属性 'children'

reactjs - Jest 意外标识符 : React

angular - 如何用 Jasmine 大理石测试受试者

javascript - 代码在 jsfiddle 中有效,但在 chrome 中无效。 - 未捕获的类型错误 : Cannot read property 'style' of undefined

php - PHP中的Json解码

reactjs - 在 React Navigation 中使用组件作为标题标题

javascript - 如何使用 yarn 工作区测试单个文件?