11import React from 'react' ;
22import '@testing-library/jest-dom' ;
3- import { render , screen , fireEvent , act } from '@testing-library/react' ;
3+ import { render , screen , fireEvent , act , waitFor } from '@testing-library/react' ;
44
55jest . mock ( 'react-i18next' , ( ) => ( {
66 useTranslation : ( ) => ( {
@@ -45,7 +45,8 @@ jest.mock('../utils/api', () => ({
4545 getInstance : ( ) => ( {
4646 getFingerPrintCount : jest . fn ( ) . mockResolvedValue ( { success : true , message : 0 } ) ,
4747 setStateLanguage : jest . fn ( ) . mockResolvedValue ( { success : true } ) ,
48- checkWebSocket : jest . fn ( ) . mockResolvedValue ( { success : true } )
48+ checkWebSocket : jest . fn ( ) . mockResolvedValue ( { success : true } ) ,
49+ checkReadiness : jest . fn ( ) . mockResolvedValue ( { success : true , checks : { server : true , webSocket : true , dbservice : true , toolService : true } } )
4950 } )
5051 }
5152} ) ) ;
@@ -64,12 +65,13 @@ describe('Layout', () => {
6465
6566 it ( 'renders child component and sidebar' , async ( ) => {
6667 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
67- expect ( screen . getByTestId ( 'child' ) ) . toBeInTheDocument ( ) ;
68+ await waitFor ( ( ) => expect ( screen . getByTestId ( 'child' ) ) . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
6869 expect ( screen . getByText ( 'Web3ToolBox' ) ) . toBeInTheDocument ( ) ;
6970 } ) ;
7071
7172 it ( 'renders all menu items' , async ( ) => {
7273 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
74+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
7375 expect ( screen . getByTitle ( 'introduction' ) ) . toBeInTheDocument ( ) ;
7476 expect ( screen . getByTitle ( 'chromeManage' ) ) . toBeInTheDocument ( ) ;
7577 expect ( screen . getByTitle ( 'walletManage' ) ) . toBeInTheDocument ( ) ;
@@ -79,13 +81,15 @@ describe('Layout', () => {
7981
8082 it ( 'toggles sidebar collapse' , async ( ) => {
8183 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
84+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
8285 const toggleBtn = screen . getByLabelText ( 'Collapse Navigation' ) ;
8386 fireEvent . click ( toggleBtn ) ;
8487 expect ( window . localStorage . getItem ( 'layout.sidebarCollapsed' ) ) . toBe ( '1' ) ;
8588 } ) ;
8689
8790 it ( 'opens task offcanvas on taskExecuted event' , async ( ) => {
8891 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
92+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
8993 expect ( screen . queryByTestId ( 'task-offcanvas' ) ) . not . toBeInTheDocument ( ) ;
9094 act ( ( ) => {
9195 eventEmitter . emit ( 'taskExecuted' ) ;
@@ -95,12 +99,14 @@ describe('Layout', () => {
9599
96100 it ( 'opens task offcanvas on button click' , async ( ) => {
97101 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
102+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
98103 fireEvent . click ( screen . getByTestId ( 'task-info-button' ) ) ;
99104 expect ( screen . getByTestId ( 'task-offcanvas' ) ) . toBeInTheDocument ( ) ;
100105 } ) ;
101106
102107 it ( 'opens and uses language offcanvas' , async ( ) => {
103108 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
109+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
104110 fireEvent . click ( screen . getByTitle ( 'changeLang' ) ) ;
105111 expect ( screen . getByText ( 'selectLang' ) ) . toBeInTheDocument ( ) ;
106112 fireEvent . click ( screen . getByText ( 'English' ) ) ;
@@ -110,11 +116,13 @@ describe('Layout', () => {
110116 it ( 'starts collapsed when localStorage has collapsed=1' , async ( ) => {
111117 window . localStorage . setItem ( 'layout.sidebarCollapsed' , '1' ) ;
112118 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
119+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
113120 expect ( screen . getByLabelText ( 'Expand Navigation' ) ) . toBeInTheDocument ( ) ;
114121 } ) ;
115122
116123 it ( 'calls fetchFingerPrints on mount' , async ( ) => {
117124 await act ( async ( ) => { render ( < Layout Child = { DummyChild } /> ) ; } ) ;
125+ await waitFor ( ( ) => expect ( screen . queryByText ( 'layout.backendLoading' ) ) . not . toBeInTheDocument ( ) , { timeout : 3000 } ) ;
118126 expect ( mockFetchFingerPrints ) . toHaveBeenCalled ( ) ;
119127 } ) ;
120128} ) ;
0 commit comments