blob: 53e9e019d6b3e9fb53b6c9b6c47a068ad3ef806e [file] [log] [blame]
import MockAdapter from 'axios-mock-adapter';
import { api } from './auth'; // 添加api导入
import { createHelpPost, getHelpPosts, getHelpPostDetail, likeHelpPost, addHelpPostComment,deleteHelpPost,searchHelpPosts } from './helpPost';
describe('求助帖API', () => {
let mockAxios;
beforeEach(() => {
mockAxios = new MockAdapter(api);
});
afterEach(() => {
mockAxios.restore();
});
describe('createHelpPost - 创建求助帖', () => {
it('应该正确发送无图片帖子数据', async () => {
const postData = {
title: '测试标题',
content: '测试内容',
authorId: 'user123'
};
// 使用函数匹配器来验证FormData内容
mockAxios.onPost('/help/posts').reply(config => {
const data = config.data;
expect(data.get('title')).toBe(postData.title);
expect(data.get('content')).toBe(postData.content);
expect(data.get('authorId')).toBe(postData.authorId);
expect(data.has('image')).toBe(false);
return [201, { code: 201 }];
});
const response = await createHelpPost(postData.title, postData.content, postData.authorId);
expect(response.status).toBe(201);
});
});
it('应该正确处理带图片的帖子', async () => {
const postData = {
title: '测试标题',
content: '测试内容',
authorId: 'user123',
selectedImage: new File(['content'], 'test.jpg')
};
mockAxios.onPost('/help/posts').reply(config => {
const data = config.data;
expect(data.get('image')).toBeInstanceOf(File);
return [201, { code: 201 }];
});
const response = await createHelpPost(
postData.title,
postData.content,
postData.authorId,
postData.selectedImage
);
expect(response.status).toBe(201);
});
describe('getHelpPosts - 获取求助帖列表', () => {
it('应该支持分页参数', async () => {
const page = 2, size = 10;
mockAxios.onGet('/help/posts', { params: { page, size } }).reply(200, {
code: 200,
data: []
});
const response = await getHelpPosts(page, size);
expect(response.status).toBe(200);
});
});
describe('likeHelpPost - 点赞求助帖', () => {
it('应该正确发送点赞请求', async () => {
mockAxios.onPost('/help/posts/post123/like').reply(200, { code: 200 });
const response = await likeHelpPost('post123');
expect(response.status).toBe(200);
});
});
describe('deleteHelpPost - 删除帖子', () => {
it('应该正确发送删除请求', async () => {
const postId = 'post789';
const authorId = 'user1';
mockAxios.onDelete(`/help/posts/${postId}`).reply(config => {
expect(config.params).toEqual({ authorId });
return [200, { code: 200 }];
});
const response = await deleteHelpPost(postId, authorId);
expect(response.status).toBe(200);
});
});
describe('searchHelpPosts - 搜索求助帖', () => {
it('应该正确发送搜索请求', async () => {
const keyword = '测试';
const page = 1, size = 5;
mockAxios.onGet('/help/posts/search', {
params: { keyword, page, size }
}).reply(200, {
code: 200,
data: {
records: [],
total: 0
}
});
const response = await searchHelpPosts(keyword, page, size);
expect(response.status).toBe(200);
expect(response.data.data).toBeDefined();
});
});
});