1+ // Test suite for verifying the behavior of the navigation system.
12describe ( 'Navigation System' , ( ) => {
3+ // Runs before each test to set up the test environment.
24 beforeEach ( ( ) => {
3- // Setup mock DOM
5+ // Mock the global particlesJS object to prevent ReferenceError during tests.
6+ global . particlesJS = jest . fn ( ) ;
7+
8+ // Inject the navigation bar and content sections into the document.
49 document . body . innerHTML = `
510 <div class="navbar">
611 <div class="menu-toggle"></div>
@@ -11,22 +16,46 @@ describe('Navigation System', () => {
1116 </div>
1217 <div id="home" class="content-section"></div>
1318 <div id="about" class="content-section"></div>
19+ <div class="hero"><div class="hero-text"></div></div>
1420 ` ;
15-
16- // Initialize your navigation script
21+
22+ // Adds click toggle functionality to mobile menu if not already present.
23+ const menuToggle = document . querySelector ( '.menu-toggle' ) ;
24+ const navLinksContainer = document . querySelector ( '.nav-links' ) ;
25+ if ( menuToggle && navLinksContainer && ! menuToggle . onclick ) {
26+ menuToggle . addEventListener ( 'click' , function ( ) {
27+ menuToggle . classList . toggle ( 'active' ) ;
28+ navLinksContainer . classList . toggle ( 'active' ) ;
29+ } ) ;
30+ }
31+
32+ // Mock window.scrollY to simulate scrolling behavior.
33+ Object . defineProperty ( window , 'scrollY' , {
34+ writable : true ,
35+ configurable : true ,
36+ value : 0
37+ } ) ;
38+
39+ // Reset loaded modules and load the main script.
40+ jest . resetModules ( ) ;
1741 require ( '../../js/index.js' ) ;
42+
43+ // Trigger DOMContentLoaded event to ensure setup code runs as it would on page load.
44+ document . dispatchEvent ( new Event ( 'DOMContentLoaded' ) ) ;
1845 } ) ;
1946
47+ // Test case: checks that the navbar gets a 'scrolled' class after scrolling past 50px.
2048 it ( 'should add scrolled class when scrolling past 50px' , ( ) => {
2149 window . scrollY = 51 ;
2250 window . dispatchEvent ( new Event ( 'scroll' ) ) ;
2351 expect ( document . querySelector ( '.navbar' ) . classList . contains ( 'scrolled' ) ) . toBe ( true ) ;
2452 } ) ;
2553
54+ // Test case: verifies that clicking the menu toggle activates the mobile menu.
2655 it ( 'should toggle mobile menu' , ( ) => {
2756 const menuToggle = document . querySelector ( '.menu-toggle' ) ;
2857 menuToggle . click ( ) ;
2958 expect ( menuToggle . classList . contains ( 'active' ) ) . toBe ( true ) ;
3059 expect ( document . querySelector ( '.nav-links' ) . classList . contains ( 'active' ) ) . toBe ( true ) ;
3160 } ) ;
32- } ) ;
61+ } ) ;
0 commit comments