ожидайте, что у вас будет звонок, если он не работает с последней установкой CreateReactApp - PullRequest
5 голосов
/ 15 января 2020

У меня есть код, подобный приведенному ниже, который проверяет, была ли вызвана моя именованная функция с определенными аргументами:

    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');

Любые подсказки, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Я пробовал это на бесплатной sh установке приложения реакции, используя 16.12.0, и оно работает.

Можете ли вы поделиться большим количеством своего кода?

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);
  });
});
0 голосов
/ 22 января 2020

Jest выдаст эту ошибку, если параметры отличаются, я думаю, что параметры, которые вы используете в компоненте, отличаются от параметров, используемых в тесте.

Пожалуйста, проверьте параметры еще раз и, если возможно, добавьте также код компонента в вопрос.

Результат теста ясно показывает, что функция вызывается, но параметры не совпадают.

...