File tree Expand file tree Collapse file tree 2 files changed +62
-0
lines changed
examples/app-router/app/isr-data-cache
packages/tests-e2e/tests/appRouter Expand file tree Collapse file tree 2 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ import { unstable_cache } from "next/cache" ;
2+
3+ async function getTime ( ) {
4+ return new Date ( ) . toISOString ( ) ;
5+ }
6+
7+ const cachedTime = unstable_cache ( getTime , { revalidate : false } ) ;
8+
9+ export const revalidate = 10 ;
10+
11+ export default async function ISR ( ) {
12+ const responseOpenNext = await fetch ( "https://opennext.js.org" , {
13+ cache : "force-cache" ,
14+ } ) ;
15+ const dateInOpenNext = responseOpenNext . headers . get ( "date" ) ;
16+ const cachedTimeValue = await cachedTime ( ) ;
17+ const time = getTime ( ) ;
18+ return (
19+ < div >
20+ < h1 > Date from from OpenNext</ h1 >
21+ < p data-testid = "fetched-date" >
22+ Date from from OpenNext: { dateInOpenNext }
23+ </ p >
24+ < h1 > Cached Time</ h1 >
25+ < p data-testid = "cached-date" > Cached Time: { cachedTimeValue } </ p >
26+ < h1 > Time</ h1 >
27+ < p data-testid = "time" > Time: { time } </ p >
28+ </ div >
29+ ) ;
30+ }
Original file line number Diff line number Diff line change @@ -61,3 +61,35 @@ test("headers", async ({ page }) => {
6161 await page . reload ( ) ;
6262 }
6363} ) ;
64+
65+ test ( "Incremental Static Regeneration with data cache" , async ( { page } ) => {
66+ test . setTimeout ( 45000 ) ;
67+ await page . goto ( "/isr-data-cache" ) ;
68+
69+ const originalFetchedDate = await page
70+ . getByTestId ( "fetched-date" )
71+ . textContent ( ) ;
72+ const originalCachedDate = await page
73+ . getByTestId ( "cached-date" )
74+ . textContent ( ) ;
75+ const originalTime = await page . getByTestId ( "time" ) . textContent ( ) ;
76+ await page . reload ( ) ;
77+
78+ let finalTime = originalTime ;
79+ let finalCachedDate = originalCachedDate ;
80+ let finalFetchedDate = originalFetchedDate ;
81+
82+ // Wait 10 + 1 seconds for ISR to regenerate time
83+ await page . waitForTimeout ( 11000 ) ;
84+ do {
85+ await page . waitForTimeout ( 2000 ) ;
86+ finalTime = await page . getByTestId ( "time" ) . textContent ( ) ;
87+ finalCachedDate = await page . getByTestId ( "cached-date" ) . textContent ( ) ;
88+ finalFetchedDate = await page . getByTestId ( "fetched-date" ) . textContent ( ) ;
89+ await page . reload ( ) ;
90+ } while ( originalTime === finalTime ) ;
91+
92+ expect ( originalTime ) . not . toEqual ( finalTime ) ;
93+ expect ( originalCachedDate ) . toEqual ( finalCachedDate ) ;
94+ expect ( originalFetchedDate ) . toEqual ( finalFetchedDate ) ;
95+ } ) ;
You can’t perform that action at this time.
0 commit comments