Skip to content

Commit 6649d79

Browse files
lex111eddyerburgh
authored andcommitted
docs: update docs/ru (#907)
1 parent 09aab0c commit 6649d79

File tree

5 files changed

+214
-38
lines changed

5 files changed

+214
-38
lines changed

docs/ru/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Vue Test Utils — официальная библиотека модульно
1111
* [Тестирование однофайловых компонентов с Mocha + webpack](guides/testing-single-file-components-with-mocha-webpack.md)
1212
* [Testing однофайловых компонентов с Karma](guides/testing-single-file-components-with-karma.md)
1313
* [Тестирование асинхронной логики](guides/testing-async-components.md)
14+
* [Использование с TypeScript](guides/using-with-typescript.md)
1415
* [Использование с Vue Router](guides/using-with-vue-router.md)
1516
* [Использование с Vuex](guides/using-with-vuex.md)
1617
* [API](api/)

docs/ru/api/options.md

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,32 +69,44 @@ expect(wrapper.find('div')).toBe(true)
6969

7070
## scopedSlots
7171

72-
- Тип: `{ [name: string]: string }`
72+
- Тип: `{ [name: string]: string|Function }`
7373

74-
Предоставляет объект содержимое слотов с ограниченной областью видимости для компонента. Ключ соответствует имени слота. Значение может быть строкой шаблона.
74+
Предоставляет объект содержимое слотов с ограниченной областью видимости для компонента. Ключ соответствует имени слота.
7575

76-
Есть три ограничения.
76+
Вы можете установить имя входного параметра, используя атрибут slot-scope:
7777

78-
* Эта опция поддерживается только с vue@2.5+.
78+
```js
79+
shallowMount(Component, {
80+
scopedSlots: {
81+
foo: '<p slot-scope="foo">{{foo.index}},{{foo.text}}</p>'
82+
}
83+
})
84+
```
7985

80-
* Вы не можете использовать тег `<template>` в качестве корневого элемента в опции `scopedSlots`.
86+
В противном случае входные параметры будут доступны как объект `props` при вычислении слота:
8187

82-
* Это не поддерживает PhantomJS.
83-
Вы можете использовать [Puppeteer](https://github.com/karma-runner/karma-chrome-launcher#headless-chromium-with-puppeteer) как альтернативу.
88+
```js
89+
shallowMount(Component, {
90+
scopedSlots: {
91+
default: '<p>{{props.index}},{{props.text}}</p>'
92+
}
93+
})
94+
```
8495

85-
Пример:
96+
Вы также можете передать функцию, которая принимает входные параметры в качестве аргумента:
8697

8798
```js
88-
const wrapper = shallowMount(Component, {
99+
shallowMount(Component, {
89100
scopedSlots: {
90-
foo: '<p slot-scope="props">{{props.index}},{{props.text}}</p>'
101+
foo: function (props) {
102+
return this.$createElement('div', props.index)
103+
}
91104
}
92105
})
93-
expect(wrapper.find('#fooWrapper').html()).toBe(
94-
`<div id="fooWrapper"><p>0,text1</p><p>1,text2</p><p>2,text3</p></div>`
95-
)
96106
```
97107

108+
Или вы можете использовать JSX. Если вы пишете JSX в методе, `this.$createElement` автоматически внедряется babel-plugin-transform-vue-jsx:
109+
98110
## stubs
99111

100112
- Тип: `{ [name: string]: Component | boolean } | Array<string>`

docs/ru/guides/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
!!!include(docs/ru/guides/testing-single-file-components-with-mocha-webpack.md)!!!
99
!!!include(docs/ru/guides/testing-single-file-components-with-karma.md)!!!
1010
!!!include(docs/ru/guides/testing-async-components.md)!!!
11+
!!!include(docs/guides/using-with-typescript.md)!!!
1112
!!!include(docs/ru/guides/using-with-vue-router.md)!!!
1213
!!!include(docs/ru/guides/using-with-vuex.md)!!!

docs/ru/guides/testing-single-file-components-with-jest.md

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -123,31 +123,6 @@ npm install --save-dev babel-jest
123123
}
124124
```
125125

126-
### Тестирование моментальными снимками
127-
128-
Вы можете использовать [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) для рендеринга компонента в строку, чтобы его можно было сохранить в качестве снимка для [тестирования моментальными снимками в Jest](https://facebook.github.io/jest/docs/en/snapshot-testing.html).
129-
130-
Результат рендеринга `vue-server-renderer` включает в себя несколько атрибутов, специфичных для SSR, и игнорирует пробелы, что затрудняет сравнивать diff. Мы можем улучшить сохранённый снимок с помощью специального сериализатора:
131-
132-
``` bash
133-
npm install --save-dev jest-serializer-vue
134-
```
135-
136-
Затем добавьте конфигурацию в `package.json`:
137-
138-
``` json
139-
{
140-
// ...
141-
"jest": {
142-
// ...
143-
// сериализатор для снимков
144-
"snapshotSerializers": [
145-
"<rootDir>/node_modules/jest-serializer-vue"
146-
]
147-
}
148-
}
149-
```
150-
151126
### Расположение файлов тестов
152127

153128
По умолчанию Jest будет рекурсивно выбирать все файлы с расширением `.spec.js` или `.test.js` во всём проекте. Если это поведение не соответствует вашим потребностям, то возможно [изменить `testRegex`](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string) в секции конфигурации в файле `package.json`.
@@ -202,6 +177,36 @@ describe('Component', () => {
202177
})
203178
```
204179

180+
### Тестирование моментальными снимками
181+
182+
Когда вы монтируете компонент с помощью Vue Test Utils, вы получаете доступ к корневому элементу HTML. Это можно сохранить в виде моментального снимка для [тестирования моментальными снимками в Jest](https://facebook.github.io/jest/docs/en/snapshot-testing.html):
183+
184+
```js
185+
test('renders correctly', () => {
186+
const wrapper = mount(Component)
187+
expect(wrapper.element).toMatchSnapshot()
188+
})
189+
```
190+
191+
``` bash
192+
npm install --save-dev jest-serializer-vue
193+
```
194+
195+
Затем добавьте конфигурацию в `package.json`:
196+
197+
``` json
198+
{
199+
// ...
200+
"jest": {
201+
// ...
202+
// serializer for snapshots
203+
"snapshotSerializers": [
204+
"jest-serializer-vue"
205+
]
206+
}
207+
}
208+
```
209+
205210
### Ресурсы
206211

207212
- [Пример проекта для этой конфигурации](https://github.com/vuejs/vue-test-utils-jest-example)
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
## Использование с TypeScript
2+
3+
> Пример проекта для этой конфигурации доступен на [GitHub](https://github.com/vuejs/vue-test-utils-typescript-example).
4+
5+
TypeScript — популярное надмножество JavaScript, которое добавляет типы и классы поверх обычного JS. Vue Test Utils включает типы в распределённый пакет, поэтому он хорошо работает с TypeScript.
6+
7+
В этом руководстве мы рассмотрим, как настроить тестовую конфигурацию для TypeScript-проекта с использованием Jest и Vue Test Utils из базовой настройки Vue CLI TypeScript.
8+
9+
### Добавление TypeScript
10+
11+
Сначала вам нужно создать проект. Если у вас нет Vue CLI, установите его глобально:
12+
13+
```shell
14+
$ npm install -g @vue/cli
15+
```
16+
17+
И создайте проект, запустив следующую команду:
18+
19+
```shell
20+
$ vue create hello-world
21+
```
22+
23+
В командной строке выберите `Manually select features`, выберите `TypeScript` и нажмите клавишу ввода. Это создаст проект с уже настроенным для работы TypeScript.
24+
25+
::: tip ПРИМЕЧАНИЕ
26+
Если вы хотите получить более подробное руководство по настройке Vue с помощью TypeScript, ознакомьтесь с [руководством для начинающих по TypeScript во Vue] (https://github.com/Microsoft/TypeScript-Vue-Starter).
27+
:::
28+
29+
Следующий шаг — добавить Jest к проекту.
30+
31+
### Настройка Jest
32+
33+
Jest — это программа для запуска тестов, разработанный Facebook и направленный на предоставление многофункционального решения для модульного тестирования. Вы можете узнать больше о Jest на его [официальной документации](https://facebook.github.io/jest/).
34+
35+
Установить Jest и Vue Test Utils:
36+
37+
```bash
38+
$ npm install --save-dev jest @vue/test-utils
39+
```
40+
41+
Затем определите команду `test:unit` в секции scripts в `package.json`.
42+
43+
```json
44+
// package.json
45+
{
46+
// ..
47+
"scripts": {
48+
// ..
49+
"test:unit": "jest"
50+
}
51+
// ..
52+
}
53+
```
54+
55+
### Обработка однофайловых компонентов в Jest
56+
57+
Чтобы научить Jest обрабатывать файлы с расширением `.vue`, нам нужно установить и настроить препроцессор `vue-jest`:
58+
59+
``` bash
60+
npm install --save-dev vue-jest
61+
```
62+
63+
Затем создайте блок `jest` в `package.json`:
64+
65+
``` json
66+
{
67+
// ...
68+
"jest": {
69+
"moduleFileExtensions": [
70+
"js",
71+
"ts",
72+
"json",
73+
// указываем Jest обрабатывать файлы с расширением `*.vue`
74+
"vue"
75+
],
76+
"transform": {
77+
// обработка файлов с расширением `*.vue` с помощью `vue-jest`
78+
".*\\.(vue)$": "vue-jest",
79+
},
80+
"testURL": "http://localhost/"
81+
}
82+
}
83+
```
84+
85+
### Настройка TypeScript для Jest
86+
87+
Чтобы использовать файлы TypeScript в тестах, нам нужно настроить Jest для компиляции TypeScript. Для этого нам нужно установить `ts-jest`:
88+
89+
``` bash
90+
$ npm install --save-dev ts-jest
91+
```
92+
93+
Затем нам нужно указать Jest обработать тестовые файлы TypeScript с помощью `ts-jest`, добавив запись в `jest.transform` в `package.json`:
94+
95+
``` json
96+
{
97+
// ...
98+
"jest": {
99+
// ...
100+
"transform": {
101+
// ...
102+
// обработка файлов с расширением `*.ts` с помощью `ts-jest`
103+
"^.+\\.tsx?$": "ts-jest"
104+
},
105+
// ...
106+
}
107+
}
108+
```
109+
110+
### Размещение тестовых файлов
111+
112+
По умолчанию Jest будет рекурсивно выбирать все файлы с расширением `.spec.js` или `.test.js` по всему проекту.
113+
114+
Чтобы запустить тестовые файлы с расширением `.ts`, нам нужно изменить `testRegex` в разделе конфигурации файла `package.json`.
115+
116+
Добавьте следующее в поле `jest` в `package.json`:
117+
118+
``` json
119+
{
120+
// ...
121+
"jest": {
122+
// ...
123+
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$"
124+
}
125+
}
126+
```
127+
128+
Jest рекомендует создать каталог `__tests__` рядом с тестируемым кодом, но не стесняйтесь структурировать ваши тесты по своему усмотрению. Просто остерегайтесь того, что Jest создаст каталог `__snapshots__` рядом с тестовыми файлами, которые выполняют тестирование моментальными снимками.
129+
130+
### Написание модульного теста
131+
132+
Теперь у нас есть проект, пришло время написать тест.
133+
134+
Создайте файл `src/components/__tests__/HelloWorld.spec.ts` и добавьте следующий код:
135+
136+
```js
137+
// src/components/__tests__/HelloWorld.spec.ts
138+
import { shallowMount } from '@vue/test-utils'
139+
import HelloWorld from '../HelloWorld.vue'
140+
141+
describe('HelloWorld.vue', () => {
142+
test('renders props.msg when passed', () => {
143+
const msg = 'new message'
144+
const wrapper = shallowMount(HelloWorld, {
145+
propsData: { msg }
146+
})
147+
expect(wrapper.text()).toMatch(msg)
148+
})
149+
})
150+
```
151+
152+
Это все, что нам нужно сделать, чтобы заставить TypeScript и Vue Test Utils работать вместе!
153+
154+
### Ресурсы
155+
156+
- [Пример проекта для этой конфигурации](https://github.com/vuejs/vue-test-utils-typescript-example)
157+
- [Jest](https://facebook.github.io/jest/)

0 commit comments

Comments
 (0)