OL-LearnPlatform/src/views/__tests__/ExamNotice.test.ts

121 lines
3.6 KiB
TypeScript
Raw Normal View History

2025-08-01 01:22:09 +08:00
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)
})
})