smalljs$molПоиск⌘ KДокументацияПесочницаСравнениеЭкосистемаО проектеRU
ТестированиеGetting StartedВведениеМентальная модельБыстрый стартОт TypeScript к view.treeСтруктура проектаИнструментарийEssentialsУстановкаВьюСостояние и реактивностьРоутингРендерингТестированиеДеплойРешение проблемDataЗагрузка данныхСхемы данныхГипер БазаMoreВитринаИз React, Vue и SvelteСборник рецептовAdvancedПлагиныМетаданные модуляОфлайнGhost-вьюAboutЧастые вопросыКомандаРелизыAPI$mol_button_major$mol_button_minor$mol_string$mol_number$mol_text$mol_paragraph$mol_list$mol_row$mol_link$mol_check$mol_switch$mol_select$mol_scroll$mol_page$mol_pick

Тестирование

Вью в $mol — функция от своего состояния, и это меняет то, как выглядит тест. Пользовательский сценарий пишется вызовами собственных методов вью: задать черновик, выполнить действие, прочитать то, что увидел бы пользователь.1app.draft( 'Milk' )2app.add()3$mol_assert_equal( app.item_title( 0 ), 'Milk' )Ни селекторов, ни браузера, ни Playwright с Cypress, ни ожидания чего бы то ни было. Тот же файл даёт вам ещё и вот что:Скорость. Тесты выполняются в Node за миллисекунды; тысяча штук укладывается примерно в минуту. node my/hello/-/node.test.js гоняет тесты одного модуля.Нулевую настройку. Файл hello.test.ts рядом с компонентом подхватывается сборщиком и компилируется в -/node.test.js. Непрерывная интеграция на mam_build гоняет его и роняет сборку, когда тест падает.Подмену сервисов через контекст. У каждого теста свой $, и всё, до чего компонент дотягивается через this.$.X, подменяется присваиванием дублёра в этот $. Ровно поэтому надо писать this.$.$mol_fetch, а не $mol_fetch: первое заменяемо, второе — нет.Замоканное время. Таймеры, созданные через контекст, сами не тикают; $mol_after_mock_warp() выполняет всё, что в очереди.Настоящий DOM, когда он нужен. В Node-бандле едет jsdom, поэтому dom_node() и querySelectorAll работают в том же тестовом файле.

Сценарий через методы вью

Возьмём список дел из Сборника рецептов: строка draft?, список items, действие add и действие delete. Его тест живёт в my/todo/todo.test.ts:1namespace $ {2 $mol_test({3 4 'add an item and delete it'( $ ) {5 const app = $my_todo.make({ $ })6 7 app.draft( 'Milk' )8 app.add()9 $mol_assert_equal( app.items().length, 1 )10 $mol_assert_equal( app.item_title( 0 ), 'Milk' )11 $mol_assert_equal( app.draft(), '' )12 13 app.delete( 0 )14 $mol_assert_like( app.item_rows(), [] )15 },16 17 'blank draft adds nothing'( $ ) {18 const app = $my_todo.make({ $ })19 20 app.draft( ' ' )21 app.add()22 $mol_assert_like( app.items(), [] )23 },24 25 })26}
Редактировать эту страницу на GitHubБыло полезно?ДаНетНазадРендерингВперёдДеплой
На этой страницеСценарий через методы вьюМок сервисаВремяЧерез DOMЧего Node-тест не покрываетЗаметки из практикиДальше
Type to search the documentation.