gpt4 book ai didi

javascript - 尝试用 Jest 制作一个简单的 Axios 模拟

转载 作者:行者123 更新时间:2023-12-03 06:56:26 26 4
gpt4 key购买 nike

我想了解 this example ,所以我尝试的第一件事是删除他的axiosConfig.js ,所以这个例子看起来更像我想解决的当前案例。但是我收到此错误

- Expected
+ Received

Object {
+ "baseURL": "https://jsonplaceholder.typicode.com/albums",
"method": "get",
"url": "/3/photos?_limit=3",
},

Number of calls: 1

39 | const photos = await getPhotosByAlbumID(3);
40 | expect(axios.request).toHaveBeenCalled();
> 41 | expect(axios.request).toHaveBeenCalledWith({ method: 'get', url: '/3/photos?_limit=3' })
| ^
42 | expect(photos.length).toEqual(3);
43 | expect(photos[0].albumId).toEqual(3)
44 | });
问题
谁能弄清楚如何修复失败的测试?
如果我删除 baseURL: 'https://jsonplaceholder.typicode.com/albums'来自 getPhotosByAlbumId() , 但是有 axios.request() 没有意义没有 baseURL .
我有它在线 https://repl.it/@SandraSchlichti/jest-playground#index.js
index.js
const axios = require('axios');

const getPhotosByAlbumId = async (id) => {
const result = await axios.request({
baseURL: 'https://jsonplaceholder.typicode.com/albums',
method: 'get',
url: `/${id}/photos?_limit=3`
});
const { data } = result;
return data;
};

module.exports = getPhotosByAlbumId;
index.spec.js
const axios = require('axios');
const getPhotosByAlbumID = require('./index');

jest.mock('axios', () => {
return {
baseURL: 'https://jsonplaceholder.typicode.com/albums',
request: jest.fn().mockResolvedValue({
data: [
{
albumId: 3,
id: 101,
title: 'incidunt alias vel enim',
url: 'https://via.placeholder.com/600/e743b',
thumbnailUrl: 'https://via.placeholder.com/150/e743b'
},
{
albumId: 3,
id: 102,
title: 'eaque iste corporis tempora vero distinctio consequuntur nisi nesciunt',
url: 'https://via.placeholder.com/600/a393af',
thumbnailUrl: 'https://via.placeholder.com/150/a393af'
},
{
albumId: 3,
id: 103,
title: 'et eius nisi in ut reprehenderit labore eum',
url: 'https://via.placeholder.com/600/35cedf',
thumbnailUrl: 'https://via.placeholder.com/150/35cedf'
}
]
})
}
})

describe('test getPhotosByAlbumID ', () => {
afterEach(() => jest.resetAllMocks());

it('fetches photos by album id', async () => {
const photos = await getPhotosByAlbumID(3);
expect(axios.request).toHaveBeenCalled();
expect(axios.request).toHaveBeenCalledWith({ method: 'get', url: '/3/photos?_limit=3' })
expect(photos.length).toEqual(3);
expect(photos[0].albumId).toEqual(3)
});
});

最佳答案

因为在您的实现中,您正在调用 axios.request使用具有 baseURL 的对象,它与您的断言不匹配。
因此,您可以断言必须使用具有 baseURL 的对象调用它

expect(axios.request).toHaveBeenCalledWith({
baseURL: "https://jsonplaceholder.typicode.com/albums",
method: "get",
url: "/3/photos?_limit=3",
});
或者调用该方法的对象必须具有以下两个属性:
expect(axios.request).toHaveBeenCalledWith(
expect.objectContaining({ method: "get", url: "/3/photos?_limit=3" })
);
working example

关于javascript - 尝试用 Jest 制作一个简单的 Axios 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64787640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com