0

我正在尝试使用发布请求创建 miragejs 服务器,但每次拨打电话时都会收到超时。奇怪的是,get/delete 端点返回正常,但 post/put 端点无限期挂起,导致开玩笑超时错误:

Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error

我的 miragejs 服务器文件:

import { createServer } from "miragejs";

export function startTestAPIServer() { 
    return createServer({
        namespace: "/testing",
        routes() {
            this.get("/test", (schema) => {
                console.log("recieved request!")
                return {"foo": "get testing"}
            });

            this.post("/test", (schema, request) => {
                return {"foo": "post testing"}
            })
        }
    });
}

我的测试文件:

import { startTestAPIServer } from "../../content/mockAPI/testAPI"
import axios from "axios"

// initiate test server
let server;

beforeEach(() => {
  server = startTestAPIServer();
})

afterEach(() => {
  server.shutdown();
})


describe("testAPI", () => {
  it("returns get request", async () => {
    var data;
    await axios
        .get("/testing/test")
        .then((res) => data = res.data)
        .catch((err) => console.log(err));
    expect(data).toEqual({"foo": "get testing"});
  })

  it("returns post request", async () => { 
    var data;
    await axios
        .post("/testing/test", {})
        .then((res) => data = res.data)
        .catch((err) => console.log(err));
      
    expect(data).toEqual({"foo": "post testing"});
  })
})

第一个案例通过,第二个案例失败。我不确定我做错了什么会导致这样的事情。我很确定不是 axios 导致了这个问题,因为我已经记录了它的请求并返回,并且只记录了请求。我也确定端点实际上被击中,因为控制台日志将从端点代码块中打印,它根本不会由于某种原因返回。不确定它是否相关,但我也在使用本机反应。

4

1 回答 1

0

这是 miragejs 的当前问题,请参见此处。cesar-medina-25 通过将以下内容添加到 jest 设置文件中找到了修复。

function FormDataMock() {
  this.append = function () {};
}
global.FormData = FormDataMock;
于 2022-01-04T05:03:08.487 回答