Skip to content
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

Merged
merged 2 commits into from
Oct 10, 2022
Merged

profile menu tests #27

merged 2 commits into from
Oct 10, 2022

Conversation

brachkow
Copy link
Contributor

@brachkow brachkow commented Oct 5, 2022

No description provided.

@@ -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', () => ({
Copy link
Contributor Author

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.

Есть идеи как это починить?

Copy link
Contributor

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.
Так мы можем гарантировать что это ссылка с нужными пропсами.

Все остальные нюансы смотри в ветке. Если будут вопросы — пиши. Можешь скопировать оттуда код, можешь просто вмерджить ту ветку себе. Делай как тебе удобнее.

@brachkow
Copy link
Contributor Author

brachkow commented Oct 5, 2022

Тут кстати у гитхаба упали экшены, поэтому лог CI сейчас не посмотреть:(

@brachkow brachkow merged commit 5d15845 into main Oct 10, 2022
@brachkow brachkow deleted the profile-menu-tests branch October 10, 2022 14:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants