22
33use gloo:: utils:: document;
44use ssr_e2e_harness:: {
5- clear_resource_timings, fetch_ssr_html, navigate , output_element, resource_request_count,
6- setup_ssr_page , wait_for,
5+ clear_resource_timings, fetch_ssr_html, output_element, resource_request_count, setup_ssr_page ,
6+ wait_for,
77} ;
88use ssr_router:: { App , AppProps , LINK_ENDPOINT } ;
9+ use wasm_bindgen:: JsCast ;
910use wasm_bindgen_test:: * ;
1011use yew:: Renderer ;
1112
@@ -90,13 +91,18 @@ async fn ssr_hydration_and_client_navigation() {
9091
9192 // -- Part 2: Navigate to /posts within the same app, then to /posts/0 --
9293
93- // Yield to ensure effects (router history listener) are registered.
94- gloo:: timers:: future:: sleep ( std:: time:: Duration :: from_millis ( 500 ) ) . await ;
94+ yew:: scheduler:: flush ( ) . await ;
9595
9696 clear_resource_timings ( ) ;
9797
98- // Navigate to /posts first, then to /posts/0 to trigger a client-side fetch.
99- navigate ( "/posts" ) ;
98+ let posts_link: web_sys:: HtmlElement = output_element ( )
99+ . query_selector ( "a.navbar-item[href='/posts']" )
100+ . unwrap ( )
101+ . expect ( "Posts navbar link should exist" )
102+ . dyn_into ( )
103+ . unwrap ( ) ;
104+ posts_link. click ( ) ;
105+ yew:: scheduler:: flush ( ) . await ;
100106
101107 wait_for (
102108 || {
@@ -114,7 +120,27 @@ async fn ssr_hydration_and_client_navigation() {
114120
115121 clear_resource_timings ( ) ;
116122
117- navigate ( "/posts/0" ) ;
123+ wait_for (
124+ || {
125+ output_element ( )
126+ . query_selector ( "a.title.is-block[href='/posts/0']" )
127+ . ok ( )
128+ . flatten ( )
129+ . is_some ( )
130+ } ,
131+ 15000 ,
132+ "post 0 card link on posts list" ,
133+ )
134+ . await ;
135+
136+ let post_link: web_sys:: HtmlElement = output_element ( )
137+ . query_selector ( "a.title.is-block[href='/posts/0']" )
138+ . unwrap ( )
139+ . unwrap ( )
140+ . dyn_into ( )
141+ . unwrap ( ) ;
142+ post_link. click ( ) ;
143+ yew:: scheduler:: flush ( ) . await ;
118144
119145 wait_for (
120146 || {
@@ -153,7 +179,7 @@ async fn ssr_hydration_and_client_navigation() {
153179 ) ;
154180
155181 app. destroy ( ) ;
156- output_element ( ) . set_inner_html ( "" ) ;
182+ yew :: scheduler :: flush ( ) . await ;
157183}
158184
159185#[ wasm_bindgen_test]
@@ -169,5 +195,5 @@ async fn hydrate_home() {
169195 . await ;
170196
171197 app. destroy ( ) ;
172- output_element ( ) . set_inner_html ( "" ) ;
198+ yew :: scheduler :: flush ( ) . await ;
173199}
0 commit comments