我首先关注this StackOverflow Question
中的答案但是我添加了一个辅助函数,该函数使用与用户相关联的身份验证令牌创建了一个新的Axios实例。
看起来像这样:
ModelName.query(
index_name: 'display-index',
expression_attribute_names: { "#display_name" => "display" },
expression_attribute_values: { ":display_value" => "das" },
key_condition_expression: "#display_name = :display_value",
)
mockAxios.create()为什么返回未定义?
同时定义了对象“ mockAxios”(和创建函数)。当我实际调用create时,尽管已声明该函数,但它仍返回未定义的值。
我知道我可以通过只返回对ockAxios来回避问题,但是我想理解为什么它首先不起作用。我希望返回一个新实例,该实例与嘲笑Axios相同,只是返回未定义。
答案 0 :(得分:1)
如果要创建自动模拟(在__mocks__
内),则意味着要模拟该模块,并且不应在该模块内放置任何辅助功能,但可能会将其包含在代码中的其他位置< / p>
例如:
src/axios.utils.ts
(导出axios和功能的实用程序模块)
import axios from "axios";
export const createAuthenticatedInstance = (
...args: Parameters<typeof axios.create>
) => {
return axios.create(...args);
};
export default axios;
src/__mocks__/axios.ts
(Axios模拟)
const axios: jest.Mocked<typeof import("axios").default> = jest.createMockFromModule(
"axios"
);
axios.create.mockReturnThis();
export default axios;
src/api.ts
(使用axios.util
的api实现)
import axios from "axios";
import { createAuthenticatedInstance } from "./axios.utils";
const client = createAuthenticatedInstance({
baseURL: "http://example.com:80/main",
});
export default {
makeSomeReq: () => client.get<string>("/path"),
};
src/api.spec.ts
(测试)
import api from "./api";
import axios, { AxiosResponse } from "axios";
jest.mock("axios");
const { get } = axios as jest.Mocked<typeof import("axios").default>;
describe("api", () => {
it("should have created an axios instance", () => {
expect(axios.create).toHaveBeenCalledWith({
baseURL: "http://example.com:80/main",
});
});
})