编写单元测试时,createUser不是函数错误吗?

时间:2020-02-17 00:03:59

标签: javascript reactjs jestjs enzyme

在编写函数的单元测试用例时,我遇到了错误。

(0 , _service.createUser) is not a function

TypeError: (0 , _service.createUser) is not a function
    at _callee$ (https://pbz00.csb.app/src/service.test.js:43:44)
    at tryCatch (https://pbz00.csb.app/node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (https://pbz00.csb.app/node_modules/regenerator-runtime/runtime.js:288:22)
    at Generator.prototype.<computed> [as next] (https://pbz00.csb.app/node_modules/regenerator-runtime/runtime.js:114:21)

这是我的功能

export const createUser = async values => {
  try {
    const response = await axios.post("http:/10.13.15.245:3000/create", {
      values
    });
    console.log("response", response);
    if (response && response.data && response.data.status.code === "200") {
      abc = true;
      return abc;
    }
  } catch (e) {
    if (e.response && e.response.data) {
      console.log(e.response.data.message);
    }
  }
};

我要检查它的返回值trueundefined

这是我的代码 https://codesandbox.io/s/busy-galois-pbz00

import { createUser } from "./service.test";

describe("service test", () => {
  it("check abc value", async () => {
    const axios = {
      post: jest.fn(() =>
        Promise.resolve({
          data: {
            greeting: "hello there",
            status: {
              code: "200"
            }
          }
        })
      )
    };
    console.log("createUser", createUser);
    let abc = await createUser();
    console.log("after createUser", abc);
    expect(abc).toBe(true);
  });
});

enter image description here

import { createUser } from "./service";

describe("service test", () => {
  it("check abc value", async () => {
    jest.spyOn(axios, "post").mockImplementation(() =>
      Promise.resolve({
        data: {
          greeting: "hello there",
          status: {
            code: "200"
          }
        }
      })
    );
    console.log("createUser", createUser);
    let abc = await createUser();
    console.log("after createUser", abc);
    expect(abc).toBe(true);
  });
});

已更新

import { createUser } from "./service";
import axios from "axios";
describe("service test", () => {
  it("check abc value", async () => {
    jest.spyOn(axios, "post").mockImplementation(() =>
      Promise.resolve({
        data: {
          greeting: "hello there",
          status: {
            code: "200"
          }
        }
      })
    );
    console.log("createUser", createUser);
    let abc = await createUser();
    console.log("after createUser", abc);
    expect(abc).toBe(true);
  });
});

1 个答案:

答案 0 :(得分:0)

您导入错误。应该是:

import { createUser } from "./service";

要模拟axios模块,可以使用此模块:

jest
  .spyOn(axios, 'post')
  .mockImplementation(() => Promise.resolve({
     data: {
       greeting: "hello there",
       status: {
        code: "200"
       }
     }
  }))

您还可以模拟整个模块:https://jestjs.io/docs/en/mock-functions.html#mocking-modules