0

我正在尝试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数据)吗?

这样我的测试用例就会通过。我想检查我是否从承诺中获得了成功,我的成功方法将被称为 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();
    });
  });
4

1 回答 1

0

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

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

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

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

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

于 2020-02-15T21:49:06.023 回答