test: add vitest config and unit tests
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
vi.mock('@/utils/request', () => ({
|
||||
default: {
|
||||
post: vi.fn(),
|
||||
get: vi.fn(),
|
||||
put: vi.fn(),
|
||||
delete: vi.fn(),
|
||||
},
|
||||
}))
|
||||
|
||||
import request from '@/utils/request'
|
||||
import { login, logout } from '@/api/login'
|
||||
|
||||
const mockedRequest = vi.mocked(request)
|
||||
|
||||
describe('login API', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
it('login sends POST to /login with credentials', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, message: 'OK' })
|
||||
const result = await login('admin', '123456')
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith('/login', { username: 'admin', password: '123456' })
|
||||
expect(result).toEqual({ code: 200, message: 'OK' })
|
||||
})
|
||||
|
||||
it('logout sends POST to /logout', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, message: '已退出' })
|
||||
const result = await logout()
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith('/logout')
|
||||
expect(result).toEqual({ code: 200, message: '已退出' })
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,31 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
vi.mock('@/utils/request', () => ({
|
||||
default: {
|
||||
get: vi.fn(),
|
||||
post: vi.fn(),
|
||||
put: vi.fn(),
|
||||
delete: vi.fn(),
|
||||
},
|
||||
}))
|
||||
|
||||
import request from '@/utils/request'
|
||||
import { createFragments } from '@/api/reportFragments'
|
||||
|
||||
const mockedRequest = vi.mocked(request)
|
||||
|
||||
describe('reportFragments API', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
it('createFragments sends POST with sessionNum and content', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, data: { id: 1 } })
|
||||
const result = await createFragments('S001', '学习了递归')
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith('/report-fragments', {
|
||||
sessionNum: 'S001',
|
||||
content: '学习了递归',
|
||||
})
|
||||
expect(result).toEqual({ code: 200, data: { id: 1 } })
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,53 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
vi.mock('@/utils/request', () => ({
|
||||
default: {
|
||||
get: vi.fn(),
|
||||
post: vi.fn(),
|
||||
put: vi.fn(),
|
||||
delete: vi.fn(),
|
||||
},
|
||||
}))
|
||||
|
||||
import request from '@/utils/request'
|
||||
import { getReviewFeed, getReportDetail, getFragmentDetail, getTaskReview } from '@/api/review'
|
||||
|
||||
const mockedRequest = vi.mocked(request)
|
||||
|
||||
describe('review API', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
it('getReviewFeed calls GET /review/feed with limit', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: [] })
|
||||
const result = await getReviewFeed(10)
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/review/feed', { limit: 10 })
|
||||
expect(result).toEqual({ code: 200, data: [] })
|
||||
})
|
||||
|
||||
it('getReviewFeed uses default limit of 30', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: [] })
|
||||
await getReviewFeed()
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/review/feed', { limit: 30 })
|
||||
})
|
||||
|
||||
it('getReportDetail calls GET /review/report/:id', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: { id: 1 } })
|
||||
const result = await getReportDetail(1)
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/review/report/1')
|
||||
expect(result).toEqual({ code: 200, data: { id: 1 } })
|
||||
})
|
||||
|
||||
it('getFragmentDetail calls GET /review/fragment/:id', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: { id: 5 } })
|
||||
await getFragmentDetail(5)
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/review/fragment/5')
|
||||
})
|
||||
|
||||
it('getTaskReview calls GET /review/task/:taskNum', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: {} })
|
||||
await getTaskReview('T001')
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/review/task/T001')
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,85 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
vi.mock('@/utils/request', () => ({
|
||||
default: {
|
||||
get: vi.fn(),
|
||||
post: vi.fn(),
|
||||
put: vi.fn(),
|
||||
delete: vi.fn(),
|
||||
},
|
||||
}))
|
||||
|
||||
import request from '@/utils/request'
|
||||
import {
|
||||
continueSession,
|
||||
pauseSession,
|
||||
endSession,
|
||||
startOrContinueStudySession,
|
||||
getSessionDetail,
|
||||
} from '@/api/studySessions'
|
||||
|
||||
const mockedRequest = vi.mocked(request)
|
||||
|
||||
describe('studySessions API', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
it('continueSession sends POST to correct endpoint', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
|
||||
await continueSession('S001')
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith('/study-sessions/S001/study-sessions/continue')
|
||||
})
|
||||
|
||||
it('pauseSession sends POST with endTime param when provided', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
|
||||
const endTime = new Date('2024-01-15T10:30:00Z')
|
||||
await pauseSession('S001', endTime)
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith(
|
||||
'/study-sessions/S001/study-sessions/pause',
|
||||
null,
|
||||
{ params: { endTime: endTime.toISOString() } }
|
||||
)
|
||||
})
|
||||
|
||||
it('pauseSession sends POST with null params when endTime not provided', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
|
||||
await pauseSession('S001')
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith(
|
||||
'/study-sessions/S001/study-sessions/pause',
|
||||
null,
|
||||
{ params: null }
|
||||
)
|
||||
})
|
||||
|
||||
it('endSession sends POST with default content', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
|
||||
await endSession('S001')
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith(
|
||||
'/study-sessions/S001/study-sessions/ended',
|
||||
{ content: '任务结束' }
|
||||
)
|
||||
})
|
||||
|
||||
it('endSession sends POST with custom content', async () => {
|
||||
mockedRequest.post.mockResolvedValue({ code: 200, data: null })
|
||||
await endSession('S001', '自定义结束')
|
||||
expect(mockedRequest.post).toHaveBeenCalledWith(
|
||||
'/study-sessions/S001/study-sessions/ended',
|
||||
{ content: '自定义结束' }
|
||||
)
|
||||
})
|
||||
|
||||
it('startOrContinueStudySession sends GET to correct endpoint', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: { sessionNum: 'S002' } })
|
||||
const result = await startOrContinueStudySession('T001')
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/tasks/T001/study-sessions/start-or-continue')
|
||||
expect(result).toEqual({ code: 200, data: { sessionNum: 'S002' } })
|
||||
})
|
||||
|
||||
it('getSessionDetail sends GET to correct endpoint', async () => {
|
||||
mockedRequest.get.mockResolvedValue({ code: 200, data: { id: 1 } })
|
||||
await getSessionDetail('S001')
|
||||
expect(mockedRequest.get).toHaveBeenCalledWith('/study-sessions/S001')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user