-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
profile menu tests #27
Conversation
8c554ab
to
5b00971
Compare
src/components/ProfileMenu.test.js
Outdated
@@ -7,6 +7,14 @@ import { faker } from '@faker-js/faker'; | |||
import { vi } from 'vitest'; | |||
import { createTestingPinia } from '@pinia/testing'; | |||
|
|||
const routerPushMock = vi.fn(); | |||
|
|||
vi.mock('vue-router', () => ({ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mburmistrov выделил эти тесты в отдельную ветку потому что тут нужно замокать роутер. Как делать это для Vue 2 я знаю, а вот для Vue 3 с SFC нет.
По идее вот этот мок должен работать, но тест падает с сообщениемexpected "spy" to be called once
и результатом 0 вместо 1.
Есть идеи как это починить?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ух, ну и задачку ты подкинул. Мозг вскипел дважды — один раз из-за vue-router-а, другой раз из-за vue-test-utils.
Держи ветку с рабочими тестами: https://github.com/tough-dev-school/lms-frontend-v2/tree/profile-menu-tests-fixed
Проблема 1: Мок vue-router-а
Ты правильно мокал роутер. Но из-за проблемы во vue-router-е код не работал.
Решается заменой первой строки на вторую:
vi.mock('vue-router');
vi.mock('vue-router/dist/vue-router.mjs')
Когда issue пофиксят, можно будет поменять обратно.
Проблема 2: Клик по RouterLinkStub не вызывает router.push
Во всяком случае у меня не удалось добиться этого поведения. Решение — проверять что мы рендерим ссылку с правильным пропсом :to.
Еще одна проблема: по неведомой мне причине в vtu2 (которые для vue3) на wrapper-е нет метода .is(). Из-за этого не получается написать код
const link = getProfileLinkWrapper().props().to;
expect(link.is(RouterLinkStub)).toBe(true);
expect(link.props().to).toEqual({ name: 'profile' });
В качестве workaround-а нахожу все RouterLinkStub в finder-функции, а потом выбираю нужную по data-testid.
Так мы можем гарантировать что это ссылка с нужными пропсами.
Все остальные нюансы смотри в ветке. Если будут вопросы — пиши. Можешь скопировать оттуда код, можешь просто вмерджить ту ветку себе. Делай как тебе удобнее.
Тут кстати у гитхаба упали экшены, поэтому лог CI сейчас не посмотреть:( |
5b00971
to
b8bbe41
Compare
No description provided.