javascript - 用 jest 模拟 api 请求并反应 js
问题描述
我正在使用 jest 和 react 测试库测试 api 请求调用,这是我的代码。
现场演示现场演示
实用程序/api.js
import axios from "axios";
const instance = axios.create({
withCredentials: true,
baseURL: process.env.REACT_APP_API_URL,
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
});
export default instance;
export async function get(url, params) {
const response = await instance({
method: "GET",
url: url,
params: params,
});
return response;
}
模拟/api.js
const mockResponse = {
data: {
attributes: {
first_name: "Jeff",
last_name: "Bezo's",
},
},
};
export default {
get: jest.fn().mockResolvedValue(mockResponse),
};
主页.js
import React, { useState, useEffect } from "react";
function Home() {
const [user, setUser] = useState();
const getUser = useCallback(async () => {
try {
const response = await api.get("/users/self");
console.log("data response..", response.data);
setUser(response.data.attributes.first_name);
} catch (error) {}
}, [dispatch]);
useEffect(() => {
getUser();
}, []);
return <div data-testid="user-info" > Welcome {user}</div>;
}
export default Home;
主页.test.js
import React, { Suspense } from "react";
import { render, cleanup, screen } from "@testing-library/react";
import "@testing-library/jest-dom/extend-expect";
import Home from "../../editor/Home";
import { Provider } from "react-redux";
import { store } from "../../app/store";
import Loader from "../../components/Loader/Loader";
const MockHomeComponent = () => {
return (
<Provider store={store}>
<Suspense fallback={<Loader />}>
<Home />
</Suspense>
</Provider>
);
};
describe("Home component", () => {
it("should return a user name", async () => {
render(<MockHomeComponent />);
const userDivElement = await screen.findByTestId(`user-info`);
expect(userDivElement).toBeInTheDocument();
screen.debug();
});
afterAll(cleanup);
});
问题:
当我运行npm run test
测试通过但在screen.debug()
结果中我没有看到按预期返回的用户名,我只是看到了Welcome
。但它应该是welcome Jeff
。
我在这里做错了什么?任何建议将不胜感激
解决方案
推荐阅读
- sql - 从平面文件源加载到 OLEDB 目标时出现 SSIS-日期错误
- c - Notepad++、NppExec、CreateProcess() 失败,错误代码为 2,Windows 10
- django - Django Channels 消费者消费 1 次通话两次
- flutter - 如何在 .bash_profile 中永久添加颤振路径?
- javascript - 无法使用本机反应在 Firebase 中更新
- java - 如何循环用户输入直到输入整数?
- sql - 了解 Snowflake 中的锁和查询状态(对单个表进行多次更新)
- python - 在 Rasa 中使用自定义操作后,我的机器人无法加载
- c# - NUnit 不会运行我的单元测试;说缺少测试适配器,但我确实安装了它
- javascript - 如何创建多个具有相同布局的 HTML 页面?