如果类在setupTests中初始化,则Jest mock axios不起作用



我正在尝试测试我的后端类,该类使用axios从后端获取一些数据。我已经嘲笑了axios,并使用get函数返回了一些值。这太棒了
但是,如果我在setupTests中创建了一个新的后端实例,测试将失败。如果我从setupTests中删除beforeEach并将其添加到测试文件中,测试将再次成功
测试失败,因为尚未调用存根
我正在使用setupTests来模拟其他测试的依赖关系。在嘲笑这一点的同时,我创建了一个Backend的子类实例。

测试

import {Backend} from "../../../shared/utils/backend";
import axios from "axios";
jest.mock("axios");
describe("backend", () => {
test("When getList is called data is returned", async () => {
(axios.get as jest.Mock) = jest.fn().mockResolvedValue(Promise.resolve({
data: [{
prop: "test",
otherProp: 2
}]
}));
const backend = new Backend("baseUrl");
const data = await backend.getList("testUrl");
expect(axios.get).toHaveBeenCalledWith("baseUrl/testUrl");
expect(data).toHaveLength(1);
});
});

设置测试

import "@testing-library/jest-dom";
import {Backend} from "./shared/utils/backend";
new Backend("test");

后端类

import axios from "axios";
export class Backend {
private _baseUrl: string;
constructor(baseUrl: string) {
axios.defaults.headers.get["Access-Control-Allow-Origin"] = "*";
axios.defaults.headers.get["Access-Control-Allow-Credentials"] = "true";
this._baseUrl = baseUrl;
}
async getList(url: string): Promise<any[] | undefined> {
const data = await axios.get<any[]>(`${this._baseUrl}/${url}`);
if (data) {
return data.data;
}
return undefined;
}
}

最后我设法解决了这个问题。我的依赖项需要在构造函数中使用后端。我的BackendMock是Backend类的扩展。这导致每当我创建mock时都会隐式地创建一个后端
我为后端创建了一个接口,并更改了依赖项以使用接口而不是类。现在不再创建后端,测试现在可以工作了。

最新更新