Модули с сгруппированными тестовыми функциями используются для определения вложенных модулей. QUnit запускает тесты на родительском модуле, прежде чем углубляться во вложенные, даже если они объявлены первыми. Обратные вызовы beforeEach и afterEach при вызове вложенного модуля будут помещаться в режиме LIFO (Last In, First Out) в родительские ловушки. Вы можете указать код для запуска до и после каждого теста, используя аргумент и хуки.
Хуки также могут быть использованы для создания свойств, которые будут использоваться в контексте каждого теста. Любые дополнительные свойства объекта hooks будут добавлены в этот контекст. Аргумент hooks является необязательным, если вы вызываете QUnit.module с аргументом обратного вызова.
Обратный вызов модуля вызывается с использованием контекста в качестве тестовой среды, при этом свойства среды копируются в тестовые, подключаемые и вложенные модули модуля.
<html> <head> <meta charset = "utf-8"> <title>QUnit basic example</title> <link rel = "stylesheet" href = "https://code.jquery.com/qunit/qunit-1.22.0.css"> <script src = "https://code.jquery.com/qunit/qunit-1.22.0.js"></script> </head> <body> <div id = "qunit"></div> <div id = "qunit-fixture"></div> <script> QUnit.module( "parent module", function( hooks ) { hooks.beforeEach( function( assert ) { assert.ok( true, "beforeEach called" ); }); hooks.afterEach( function( assert ) { assert.ok( true, "afterEach called" ); }); QUnit.test( "hook test 1", function( assert ) { assert.expect( 2 ); }); QUnit.module( "nested hook module", function( hooks ) { // This will run after the parent module's beforeEach hook hooks.beforeEach( function( assert ) { assert.ok( true, "nested beforeEach called" ); }); // This will run before the parent module's afterEach hooks.afterEach( function( assert ) { assert.ok( true, "nested afterEach called" ); }); QUnit.test( "hook test 2", function( assert ) { assert.expect( 4 ); }); }); }); </script> <div id = "console" ></div> </body> </html>
Проверьте вывод
Вы должны увидеть следующий результат —