forked from kay-is/react-from-zero
-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy path17-unit-testing.html
More file actions
87 lines (68 loc) · 4.09 KB
/
17-unit-testing.html
File metadata and controls
87 lines (68 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<!DOCTYPE html>
<title>17 Модульное тестирование - React с нуля</title>
<script src="https://unpkg.com/react@16.4.0/umd/react.development.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script src="https://unpkg.com/mocha@5.2.0/mocha.js">
// основной инструмент для тестирования в React — это Jest, но он не запускается в браузере
// Именно поэтому мы используем только части Jest (expect и jest-mock)
// чтобы проиллюстрировать простую установку тестирования. Mocha используется как альтернативный исполнитель тестов
</script>
<link href="https://unpkg.com/mocha@5.2.0/mocha.css" rel="stylesheet" />
<!--
Поверхностный отрисовщик необходимым для отрисовки компонентов без необходимости
ReactDOM или DOM в целом
-->
<script src="https://unpkg.com/react-test-renderer@16.4.1/umd/react-test-renderer-shallow.development.js"></script>
<!-- Эти две библиотеки являются частью инструмента Jest -->
<script src="https://unpkg.com/expect@%3C21/umd/expect.min.js"></script>
<script src="https://unpkg.com/jest-mock@23.2.0/build-es5/index.js"></script>
<!-- Цель отрисовки результатов теста Mocha -->
<div id="mocha"></div>
<script type="text/babel">
// Если вы в дальнейшем будете использовать Jest, игнорируйте специальный код для Mocha
mocha.setup("bdd");
// Простой компонент. Обычно он импортируется из другого файла
const MyComponent = () => (
<div>
<span className="heading">Заголовок</span>
</div>
);
// первый тест, Jest и Mocha, оба используют describe() и it()
describe("Component", () => {
it("должен отрисовать компонент", () => {
// новый отрисовщик создаётся и используется для отрисовки компонента
const renderer = new ReactShallowRenderer();
renderer.render(<MyComponent />);
// результат должен выглядеть вполне обычным из урока 00
let result = renderer.getRenderOutput();
// теперь вы можете просмотреть результат и проверить его на правильность
expect(result.type).toBe("div");
expect(result.props.children).toEqual(
<span className="heading">Title</span>
);
// Jest также может создавать файлы снимков (snapshot)
// они будут использоваться для проверки изменений в следующих тестах
// expect(result).toMatchSnapshot();
});
});
// также возможно имитировать части тестируемого (целевого) кода с помощью Jest
// здесь мы используем имитационную часть Jest отдельно
// обычно это часть глобального объекта "jest"
const jest = window["jest-mock"];
// имитационная функция для тестирования поведения колбэка
const mockCallback = jest.fn();
describe("Callback", () => {
it("должна вызвана два раза", () => {
// тестовая функция, вызывающая колбэк два раза
const callCallback = c => {
c();
c();
};
callCallback(mockCallback);
// у имитационной функции есть некоторые свойства для проверки её использования
expect(mockCallback.mock.calls.length).toBe(2);
});
});
mocha.checkLeaks();
mocha.run();
</script>