Skip to content

Commit

Permalink
fix(vercel#40025): perform beforeInteractive test in dev as well
Browse files Browse the repository at this point in the history
  • Loading branch information
SukkaW committed Sep 14, 2022
1 parent 46dd1cf commit 0a1fe30
Showing 1 changed file with 78 additions and 78 deletions.
156 changes: 78 additions & 78 deletions test/integration/script-loader/test/index.test.js
Expand Up @@ -94,74 +94,72 @@ const runTests = (isDev = false) => {
}
})

if (!isDev) {
it('priority beforeInteractive', async () => {
const html = await renderViaHTTP(appPort, '/page1')
const $ = cheerio.load(html)
it('priority beforeInteractive', async () => {
const html = await renderViaHTTP(appPort, '/page1')
const $ = cheerio.load(html)

function test(id) {
const script = $(`#${id}`)
function test(id) {
const script = $(`#${id}`)

// Renders script tag
expect(script.length).toBe(1)
expect(script.attr('data-nscript')).toBeDefined()
// Renders script tag
expect(script.length).toBe(1)
expect(script.attr('data-nscript')).toBeDefined()

// Script is inserted before NextScripts
expect(
$(`#${id} ~ script[src^="/_next/static/chunks/main"]`).length
).toBeGreaterThan(0)
}
// Script is inserted before NextScripts
expect(
$(`#${id} ~ script[src^="/_next/static/chunks/main"]`).length
).toBeGreaterThan(0)
}

test('scriptBeforeInteractive')
})
test('scriptBeforeInteractive')
})

// Warning - Will be removed in the next major release
it('priority beforeInteractive - older version', async () => {
const html = await renderViaHTTP(appPort, '/page6')
const $ = cheerio.load(html)
// Warning - Will be removed in the next major release
it('priority beforeInteractive - older version', async () => {
const html = await renderViaHTTP(appPort, '/page6')
const $ = cheerio.load(html)

function test(id) {
const script = $(`#${id}`)
function test(id) {
const script = $(`#${id}`)

// Renders script tag
expect(script.length).toBe(1)
expect(script.attr('data-nscript')).toBeDefined()
// Renders script tag
expect(script.length).toBe(1)
expect(script.attr('data-nscript')).toBeDefined()

// Script is inserted before NextScripts
expect(
$(`#${id} ~ script[src^="/_next/static/chunks/main"]`).length
).toBeGreaterThan(0)
}
// Script is inserted before NextScripts
expect(
$(`#${id} ~ script[src^="/_next/static/chunks/main"]`).length
).toBeGreaterThan(0)
}

test('scriptBeforePageRenderOld')
})
test('scriptBeforePageRenderOld')
})

it('priority beforeInteractive on navigate', async () => {
let browser
try {
browser = await webdriver(appPort, '/')
it('priority beforeInteractive on navigate', async () => {
let browser
try {
browser = await webdriver(appPort, '/')

// beforeInteractive scripts should load once
let documentBIScripts = await browser.elementsByCss(
'[src$="scriptBeforeInteractive"]'
)
expect(documentBIScripts.length).toBe(2)
// beforeInteractive scripts should load once
let documentBIScripts = await browser.elementsByCss(
'[src$="scriptBeforeInteractive"]'
)
expect(documentBIScripts.length).toBe(2)

await browser.waitForElementByCss('[href="/page1"]')
await browser.click('[href="/page1"]')
await browser.waitForElementByCss('[href="/page1"]')
await browser.click('[href="/page1"]')

await browser.waitForElementByCss('.container')
await browser.waitForElementByCss('.container')

// Ensure beforeInteractive script isn't duplicated on navigation
documentBIScripts = await browser.elementsByCss(
'[src$="scriptBeforeInteractive"]'
)
expect(documentBIScripts.length).toBe(2)
} finally {
if (browser) await browser.close()
}
})
}
// Ensure beforeInteractive script isn't duplicated on navigation
documentBIScripts = await browser.elementsByCss(
'[src$="scriptBeforeInteractive"]'
)
expect(documentBIScripts.length).toBe(2)
} finally {
if (browser) await browser.close()
}
})

it('onload fires correctly', async () => {
let browser
Expand All @@ -187,37 +185,39 @@ const runTests = (isDev = false) => {
}
})

if (!isDev) {
it('priority beforeInteractive with inline script', async () => {
const html = await renderViaHTTP(appPort, '/page5')
const $ = cheerio.load(html)
it('priority beforeInteractive with inline script', async () => {
const html = await renderViaHTTP(appPort, '/page5')
const $ = cheerio.load(html)

const script = $('#inline-before')
expect(script.length).toBe(1)
const script = $('#inline-before')
expect(script.length).toBe(1)

// css bundle is only generated in production, so only perform inline script position check in production
if (!isDev) {
// Script is inserted before CSS
expect(
$(`#inline-before ~ link[href^="/_next/static/css"]`).length
).toBeGreaterThan(0)
})
}
})

it('priority beforeInteractive with inline script should execute', async () => {
let browser
try {
browser = await webdriver(appPort, '/page7')
await waitFor(1000)

const logs = await browser.log()
expect(
logs.some((log) =>
log.message.includes('beforeInteractive inline script run')
)
).toBe(true)
} finally {
if (browser) await browser.close()
}
})
}
it('priority beforeInteractive with inline script should execute', async () => {
let browser
try {
browser = await webdriver(appPort, '/page7')
await waitFor(1000)

const logs = await browser.log()
// not only should inline script run, but also should only run once
expect(
logs.filter((log) =>
log.message.includes('beforeInteractive inline script run')
).length
).toBe(1)
} finally {
if (browser) await browser.close()
}
})

it('Does not duplicate inline scripts', async () => {
let browser
Expand Down

0 comments on commit 0a1fe30

Please sign in to comment.