OL-LearnPlatform/src/views/__tests__/ExamNotice.test.ts
2025-08-01 01:22:09 +08:00

121 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, it, expect, vi, beforeEach } from 'vitest'
import { mount } from '@vue/test-utils'
import { createRouter, createWebHistory } from 'vue-router'
import ExamNotice from '../ExamNotice.vue'
// Mock router
const mockRouter = createRouter({
history: createWebHistory(),
routes: [
{
path: '/course/:courseId/exam/:sectionId/notice',
name: 'ExamNotice',
component: ExamNotice
},
{
path: '/course/:courseId/exam/:sectionId',
name: 'Exam',
component: { template: '<div>Exam Page</div>' }
},
{
path: '/course/:courseId',
name: 'CourseDetail',
component: { template: '<div>Course Detail</div>' }
}
]
})
describe('ExamNotice', () => {
let wrapper: any
beforeEach(async () => {
// 设置路由参数
await mockRouter.push('/course/1/exam/20/notice?courseName=测试课程&examName=期末考试')
wrapper = mount(ExamNotice, {
global: {
plugins: [mockRouter]
}
})
})
it('应该正确渲染考前须知页面', () => {
expect(wrapper.find('.exam-notice-page').exists()).toBe(true)
expect(wrapper.find('.center-title').text()).toBe('考试中心')
expect(wrapper.find('.notice-title').text()).toBe('考前须知')
})
it('应该显示所有考前须知条目', () => {
const noticeItems = wrapper.findAll('.notice-item')
expect(noticeItems.length).toBe(12) // 应该有12条须知
// 检查第一条须知
expect(noticeItems[0].find('.item-number').text()).toBe('1.')
expect(noticeItems[0].find('.item-text').text()).toContain('考试时间为2024年8月31日-9月30日')
})
it('应该有返回和开始考试按钮', () => {
const backButton = wrapper.find('.btn-secondary')
const startButton = wrapper.find('.btn-primary')
expect(backButton.exists()).toBe(true)
expect(startButton.exists()).toBe(true)
expect(backButton.text()).toContain('返回上级')
expect(startButton.text()).toBe('我已阅读,开始考试')
})
it('点击返回按钮应该跳转到课程详情页', async () => {
const pushSpy = vi.spyOn(mockRouter, 'push')
const backButton = wrapper.find('.btn-secondary')
await backButton.trigger('click')
expect(pushSpy).toHaveBeenCalledWith('/course/1')
})
it('点击开始考试按钮应该跳转到考试页面', async () => {
const pushSpy = vi.spyOn(mockRouter, 'push')
const startButton = wrapper.find('.btn-primary')
await startButton.trigger('click')
expect(pushSpy).toHaveBeenCalledWith({
name: 'Exam',
params: {
courseId: 1,
sectionId: 20
},
query: {
courseName: '测试课程',
examName: '期末考试',
fromNotice: 'true'
}
})
})
it('应该正确显示浏览次数', () => {
const viewCount = wrapper.find('.view-count')
expect(viewCount.text()).toContain('浏览次数1024')
})
it('应该有正确的页面标题和副标题', () => {
const title = wrapper.find('.center-title')
const subtitle = wrapper.find('.center-subtitle')
expect(title.text()).toBe('考试中心')
expect(subtitle.text()).toBe('诚信考试规范,考试过程规范,严格监考规范')
})
it('应该有正确的导航菜单', () => {
const navItem = wrapper.find('.nav-menu .nav-item')
expect(navItem.exists()).toBe(true)
expect(navItem.find('.nav-text').text()).toBe('考前须知')
expect(navItem.classes()).toContain('active')
})
it('应该没有页脚信息(已移除)', () => {
const footer = wrapper.find('.footer')
expect(footer.exists()).toBe(false)
})
})