【发布时间】:2021-09-05 17:57:36
【问题描述】:
我开始使用 Jest Vue 进行单元测试。我想测试一个 Vue 组件中的现有方法,我写了一个测试但它没有通过。而且我不知道如何在测试中模拟和调用该方法。
如何编写一个好的单元测试,以传递 'goPage()' 方法的功能?
我的方法是:
goPage(id, name, categoryId) {
this.headerSearchInput = name
this.$router.push({
path: '/categories/' + categoryId + '/courses/' + id,
query: { query: this.headerSearchInput },
})
}
我的测试是:
import { shallowMount, createLocalVue } from '@vue/test-utils'
import HeaderSearch from '../../components/header/HeaderSearch.vue'
const localVue = createLocalVue()
localVue.use(VueRouter)
const router = new VueRouter()
describe('Header search component', () => {
const mockRoute = {
path: '/categories/' + 2 + '/courses/' + 4,
query: {
query: searchedText,
},
}
const mockRouter = {
push: jest.fn(),
}
const wrapper = shallowMount(HeaderSearch, {
router,
localVue,
stubs: {
NuxtLink: true,
},
global: {
mocks: {
$route: mockRoute,
$router: mockRouter,
},
},
})
test('redirect to course page, goPage', async () => {
const courseId = 4
const courseTitle = 'Inbound Marketing'
const categoryId = 2
const mockedFunction = jest.fn()
wrapper.vm.goPage(courseId, courseTitle, categoryId)
await wrapper.setData({
headerSearchInput: courseTitle,
})
const expectedRouter = {
path: '/categories/3/courses/4',
query: { query: wrapper.vm.headerSearchInput },
}
expect(mockedFunction).toBeCalledWith(courseId, courseTitle, categoryId)
expect(wrapper.vm.$router.path).toEqual(expectedRouter.path)
})
})
【问题讨论】:
标签: vue.js unit-testing jestjs