Files
next.js/test/e2e/app-dir/no-double-tailwind-execution/no-double-tailwind-execution.test.ts
Niklas MischkulnigandGitHub 181c9af0b4 Fix no-double-tailwind-execution flake (#86549)
https://github.com/vercel/next.js/runs/56466402435

wait for the `patchFile` revert operation to finish before asserting

```
FAIL webpack test/e2e/app-dir/no-double-tailwind-execution/no-double-tailwind-execution.test.ts (31.136 s)
  no-double-tailwind-execution
    ✕ should run tailwind only once initially and per change (20280 ms)

  ● no-double-tailwind-execution › should run tailwind only once initially and per change

    expect(received).toBe(expected) // Object.is equality

    Expected: 3
    Received: 2

      48 |     ].length
      49 |     if (isNextDev) {
    > 50 |       expect(tailwindProcessingCount).toBe(3) // dev: initial + hmr + hmr (revert)
         |                                       ^
      51 |     } else {
      52 |       expect(tailwindProcessingCount).toBe(1) // build
      53 |     }

      at Object.toBe (e2e/app-dir/no-double-tailwind-execution/no-double-tailwind-execution.test.ts:50:39)
```
2025-11-26 19:43:01 +01:00

60 lines
1.6 KiB
TypeScript

import { nextTestSetup } from 'e2e-utils'
import { retry } from 'next-test-utils'
describe('no-double-tailwind-execution', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
skipDeployment: true,
dependencies: {
'@tailwindcss/postcss': '^4',
tailwindcss: '^4',
},
env: {
DEBUG: 'tailwindcss',
...process.env,
},
})
if (skipped) {
return
}
it('should run tailwind only once initially and per change', async () => {
const browser = await next.browser('/')
expect(await browser.elementByCss('p').text()).toBe('hello world')
function getTailwindProcessingCount() {
return [
...next.cliOutput.matchAll(
/\[@tailwindcss\/postcss\] app\/globals.css/g
),
].length
}
expect(getTailwindProcessingCount()).toBe(1) // initial
if (isNextDev) {
await next.patchFile(
'app/page.tsx',
(content) => content.replace('hello world', 'hello hmr'),
async () => {
await retry(async () => {
expect(await browser.elementByCss('p').text()).toBe('hello hmr')
expect(getTailwindProcessingCount()).toBe(2) // dev: initial + hmr
})
}
)
// Wait for the patchFile revert to get processed
await retry(async () => {
expect(await browser.elementByCss('p').text()).toBe('hello world')
})
}
if (isNextDev) {
expect(getTailwindProcessingCount()).toBe(3) // dev: initial + hmr + hmr (revert)
} else {
expect(getTailwindProcessingCount()).toBe(1) // build
}
})
})