【问题标题】:how to check function is called or not in react js?如何检查函数是否在反应js中被调用?
【发布时间】:2020-05-31 01:49:30
【问题描述】:

我正在尝试test我的服务,它具有一个功能saveWithoutSubmit

export const saveWithoutSubmit = async (
  values,
  orderId,
  taskId,
  fseMsisdn,
  updateTaskListAfterFilter
) => {
  var obj = {
    remarks: values.remarks,
    requestedBy: localStorage.getItem("msisdn")
  };
  try {
    const response = await sendPostRequest(`${API_TASK_URL}closeSr`, {
      ...obj,
      saveWithoutSubmit: true
    });

    if (response && response.data && response.data.status.code !== "200") {
      error(response.data.result.message);
    } else {
      console.log(response);
      success(response.data.status.message);
      updateTaskListAfterFilter();
    }
  } catch (e) {
    if (e.response && e.response.data) {
      console.log(e.response.data.message);
      error(e.response.data.status.message);
    }
  }
};

我想检查successerror 方法是否被调用?或updateTaskListAfterFilter 是否被调用?

我试过这样

https://codesandbox.io/s/ecstatic-currying-5q1b8

describe("remark service test", () => {
  const fakeAxios = {
    get: jest.fn(() => Promise.resolve({ data: { greeting: "hello there" } }))
  };
  it("save without sumit", () => {
    const updateTaskListAfterFilter = () => {};
    saveWithoutSubmit({}, updateTaskListAfterFilter);

    expect(updateTaskListAfterFilter).toBeCalled();
  });
});

您能否建议我将如何测试 async 方法或发布请求(使用 mook 数据)?

这样我的测试用例就会通过。 我想检查我是否从 promise 中获得了成功,我的成功方法将被称为 else 错误

任何更新?..!!

更新

https://codesandbox.io/s/ecstatic-currying-5q1b8

it("save without sumit", async () => {
    const sendPostRequest = jest.fn(() =>
      Promise.resolve({ data: { greeting: "hello there" } })
    );
    const updateTaskListAfterFilter = () => {};
    saveWithoutSubmit({}, updateTaskListAfterFilter);

    expect(updateTaskListAfterFilter).toBeCalled();
  });


it("save without sumit", async () => {
    const sendPostRequest = jest.fn(() =>
      Promise.resolve({ data: { greeting: "hello there" } })
    );

    const mockUpdateTaskListAfterFilter = jest.fn();
    const updateTaskListAfterFilter = () => {};
    saveWithoutSubmit({}, updateTaskListAfterFilter);

    expect(updateTaskListAfterFilter).toBeCalled();

    await wait(() => {
      expect(mockUpdateTaskListAfterFilter).toBeCalled();
    });
  });

【问题讨论】:

标签: javascript reactjs jestjs jest-mock-axios


【解决方案1】:

您应该将it("save without sumit", () => { 更改为it("save without sumit", async () => {

然后您通常使用jest.fn() 创建一个模拟函数,然后将其提供给另一个函数或组件。

最后,等待调用的模拟函数:

await wait(() => {
  expect(mockUpdateTaskListAfterFilter).toBeCalled();
});

或者,您可以在调用模拟之前等待一些您知道将发生的其他事件,例如调用其他模拟或页面上出现的某些内容,然后检查您的模拟是否被调用。

【讨论】:

  • 你用我告诉你的更新它怎么样,如果它仍然不起作用,更新你的问题,我会再次尝试帮助你。
  • 你能粘贴完整的错误吗?看起来你没有给 saveWithoutSubmit() 你的模拟函数。
  • Could not find dependency: 'axios' relative to '/src/remark.service.js' DependencyNotFoundError: Could not find dependency: 'axios' relative to '/src/remark.service.js' at n
  • 有什么想法吗?为什么会这样
猜你喜欢
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多