Widok $mol jest funkcją swojego stanu, a to zmienia postać testu. Scenariusz użytkownika zapisuje się jako wywołania własnych metod widoku: ustaw wersję roboczą, uruchom akcję, przeczytaj to, co zobaczyłby użytkownik.1app.draft('Milk')2app.add()3$mol_assert_equal(app.item_title(0),'Milk')Bez selektorów, bez przeglądarki, bez Playwrighta czy Cypressa, bez czekania na cokolwiek. Ten sam plik daje ci też:Szybkość. Testy biegną w Node w milisekundach; tysiąc z nich zajmuje jakąś minutę. nodemy/hello/-/node.test.js uruchamia te dla jednego modułu.Zero konfiguracji.hello.test.ts obok komponentu jest podchwytywany przez builder i kompilowany do -/node.test.js. Ciągła integracja z mam_build uruchamia go i wywala build, gdy test nie przejdzie.Podmiana serwisów przez kontekst. Każdy test dostaje własne $, a wszystko, po co komponent sięga przez this.$.X, podmienia się, przypisując do tego $ atrapę. To właśnie powód, żeby pisać this.$.$mol_fetch, a nie $mol_fetch: pierwsze da się podmienić, drugie nie.Zamockowany czas. Timery tworzone przez kontekst nie tykają same z siebie; $mol_after_mock_warp() wykonuje to, co stoi w kolejce.Prawdziwy DOM, gdy jest potrzebny. Bundle Node niesie jsdom, więc dom_node() i querySelectorAll działają w tym samym pliku testowym.
Weź listę zadań ze Zbioru przepisów: ciąg draft?, lista items, akcja add i akcja delete. Jej test mieszka w my/todo/todo.test.ts:1namespace ${2$mol_test({34'add an item and delete it'($){5const app=$my_todo.make({$})67app.draft('Milk')8app.add()9$mol_assert_equal(app.items().length,1)10$mol_assert_equal(app.item_title(0),'Milk')11$mol_assert_equal(app.draft(),'')1213app.delete(0)14$mol_assert_like(app.item_rows(),[])15},1617'blank draft adds nothing'($){18const app=$my_todo.make({$})1920app.draft(' ')21app.add()22$mol_assert_like(app.items(),[])23},2425})26}Edytuj tę stronę na GitHubieCzy to było pomocne?TakNiePoprzedniaRenderowanieNastępnaWdrożenieNa tej stronieScenariusz przez metody widokuMockowanie serwisuCzasPrzez DOMCzego test w Node nie obejmujeUwagi praktyczneDalejType to search the documentation.