diff options
author | 2024-02-15 11:51:12 +0000 | |
---|---|---|
committer | 2024-02-15 11:51:12 +0000 | |
commit | e845fb2eaaf3ce4ba60864e978a1df2e35d21bac (patch) | |
tree | ef05cb0d3205b1f8e253a033fd720098e1d91495 | |
parent | 141f2fb75749a8be048af100c1308a4ec72cced5 (diff) | |
download | astro-e845fb2eaaf3ce4ba60864e978a1df2e35d21bac.tar.gz astro-e845fb2eaaf3ce4ba60864e978a1df2e35d21bac.tar.zst astro-e845fb2eaaf3ce4ba60864e978a1df2e35d21bac.zip |
chore: move tests to node (#10123)
* chore: move tests to node
* fix
-rw-r--r-- | packages/astro/test/page-format.nodetest.js (renamed from packages/astro/test/page-format.test.js) | 11 | ||||
-rw-r--r-- | packages/astro/test/page-level-styles.nodetest.js (renamed from packages/astro/test/page-level-styles.test.js) | 7 | ||||
-rw-r--r-- | packages/astro/test/parallel.nodetest.js (renamed from packages/astro/test/parallel.test.js) | 13 | ||||
-rw-r--r-- | packages/astro/test/partials.nodetest.js (renamed from packages/astro/test/partials.test.js) | 9 | ||||
-rw-r--r-- | packages/astro/test/postcss.nodetest.js | 59 | ||||
-rw-r--r-- | packages/astro/test/postcss.test.js | 56 | ||||
-rw-r--r-- | packages/astro/test/preact-compat-component.nodetest.js (renamed from packages/astro/test/preact-compat-component.test.js) | 7 | ||||
-rw-r--r-- | packages/astro/test/preact-component.nodetest.js (renamed from packages/astro/test/preact-component.test.js) | 31 | ||||
-rw-r--r-- | packages/astro/test/preview-routing.nodetest.js (renamed from packages/astro/test/preview-routing.test.js) | 115 | ||||
-rw-r--r-- | packages/astro/test/public-base-404.nodetest.js (renamed from packages/astro/test/public-base-404.test.js) | 28 | ||||
-rw-r--r-- | packages/astro/test/react-and-solid.nodetest.js (renamed from packages/astro/test/react-and-solid.test.js) | 7 | ||||
-rw-r--r-- | packages/astro/test/react-jsx-export.nodetest.js (renamed from packages/astro/test/react-jsx-export.test.js) | 14 | ||||
-rw-r--r-- | packages/astro/test/redirects.nodetest.js (renamed from packages/astro/test/redirects.test.js) | 90 | ||||
-rw-r--r-- | packages/astro/test/reexport-astro-containing-client-component.nodetest.js (renamed from packages/astro/test/reexport-astro-containing-client-component.test.js) | 7 | ||||
-rw-r--r-- | packages/astro/test/remote-css.nodetest.js (renamed from packages/astro/test/remote-css.test.js) | 7 | ||||
-rw-r--r-- | packages/astro/test/root-srcdir-css.nodetest.js (renamed from packages/astro/test/root-srcdir-css.test.js) | 5 | ||||
-rw-r--r-- | packages/astro/test/route-manifest.nodetest.js (renamed from packages/astro/test/route-manifest.test.js) | 0 | ||||
-rw-r--r-- | packages/astro/test/routing-priority.nodetest.js (renamed from packages/astro/test/routing-priority.test.js) | 35 |
18 files changed, 265 insertions, 236 deletions
diff --git a/packages/astro/test/page-format.test.js b/packages/astro/test/page-format.nodetest.js index 7fd68a617..7f579dae8 100644 --- a/packages/astro/test/page-format.test.js +++ b/packages/astro/test/page-format.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -20,7 +21,7 @@ describe('build.format', () => { it('relative urls created point to sibling folders', async () => { let html = await fixture.readFile('/nested/page/index.html'); let $ = cheerio.load(html); - expect($('#another').attr('href')).to.equal('/nested/page/another/'); + assert.equal($('#another').attr('href'), '/nested/page/another/'); }); }); }); @@ -45,7 +46,7 @@ describe('build.format', () => { it('relative urls created point to sibling folders', async () => { let html = await fixture.readFile('/nested/page.html'); let $ = cheerio.load(html); - expect($('#another').attr('href')).to.equal('/nested/another/'); + assert.equal($('#another').attr('href'), '/nested/another/'); }); }); }); @@ -80,13 +81,13 @@ describe('build.format', () => { it('relative urls created point to sibling folders', async () => { let html = await fixture.readFile('/en/nested/page.html'); let $ = cheerio.load(html); - expect($('#another').attr('href')).to.equal('/test/en/nested/another/'); + assert.equal($('#another').attr('href'), '/test/en/nested/another/'); }); it('index files are written as index.html', async () => { let html = await fixture.readFile('/en/nested/index.html'); let $ = cheerio.load(html); - expect($('h1').text()).to.equal('Testing'); + assert.equal($('h1').text(), 'Testing'); }); }); }); diff --git a/packages/astro/test/page-level-styles.test.js b/packages/astro/test/page-level-styles.nodetest.js index bed538a54..eb4ba032a 100644 --- a/packages/astro/test/page-level-styles.test.js +++ b/packages/astro/test/page-level-styles.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import { load as cheerioLoad } from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -18,12 +19,12 @@ describe('Page-level styles', () => { it("Doesn't add page styles for a page without style imports", async () => { let html = await fixture.readFile('/index.html'); let $ = await cheerioLoad(html); - expect($('link').length).to.equal(0); + assert.equal($('link').length, 0); }); it('Does add page styles for pages with style imports (or deps)', async () => { let html = await fixture.readFile('/blog/index.html'); let $ = await cheerioLoad(html); - expect($('link').length).to.equal(1); + assert.equal($('link').length, 1); }); }); diff --git a/packages/astro/test/parallel.test.js b/packages/astro/test/parallel.nodetest.js index 22b76eda0..b2b70234f 100644 --- a/packages/astro/test/parallel.test.js +++ b/packages/astro/test/parallel.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -22,14 +23,16 @@ describe('Component parallelization', () => { ); const renderStartWithin = Math.max(...startTimes) - Math.min(...startTimes); - expect(renderStartWithin).to.be.lessThan( - 40, // in theory, this should be 0, but add 40ms tolerance for CI + assert.equal( + renderStartWithin < 40, + true, // in theory, this should be 0, but add 40ms tolerance for CI "The components didn't start rendering in parallel" ); const totalRenderTime = Math.max(...finishTimes) - Math.min(...startTimes); - expect(totalRenderTime).to.be.lessThan( - 80, // max component delay is 40ms, add 40ms tolerance for CI + assert.equal( + totalRenderTime < 80, + true, // max component delay is 40ms, add 40ms tolerance for CI 'The total render time was significantly longer than the max component delay' ); }); diff --git a/packages/astro/test/partials.test.js b/packages/astro/test/partials.nodetest.js index 447458778..84880781e 100644 --- a/packages/astro/test/partials.test.js +++ b/packages/astro/test/partials.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it, after } from 'node:test'; import { loadFixture } from './test-utils.js'; describe('Partials', () => { @@ -25,7 +26,7 @@ describe('Partials', () => { it('is only the written HTML', async () => { const html = await fixture.fetch('/partials/item/').then((res) => res.text()); - expect(html.startsWith('<li')).to.equal(true); + assert.equal(html.startsWith('<li'), true); }); }); @@ -36,12 +37,12 @@ describe('Partials', () => { it('is only the written HTML', async () => { const html = await fixture.readFile('/partials/item/index.html'); - expect(html.startsWith('<li>')).to.equal(true); + assert.equal(html.startsWith('<li>'), true); }); it('Works with mdx', async () => { const html = await fixture.readFile('/partials/docs/index.html'); - expect(html.startsWith('<h1')).to.equal(true); + assert.equal(html.startsWith('<h1'), true); }); }); }); diff --git a/packages/astro/test/postcss.nodetest.js b/packages/astro/test/postcss.nodetest.js new file mode 100644 index 000000000..7de73b0d8 --- /dev/null +++ b/packages/astro/test/postcss.nodetest.js @@ -0,0 +1,59 @@ +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; +import * as cheerio from 'cheerio'; +import eol from 'eol'; +import { loadFixture } from './test-utils.js'; + +describe('PostCSS', () => { + let fixture; + let bundledCSS; + before( + async () => { + fixture = await loadFixture({ + root: './fixtures/postcss', + // test suite was authored when inlineStylesheets defaulted to never + build: { inlineStylesheets: 'never' }, + }); + await fixture.build(); + + // get bundled CSS (will be hashed, hence DOM query) + const html = await fixture.readFile('/index.html'); + const $ = cheerio.load(html); + const bundledCSSHREF = $('link[rel=stylesheet][href^=/_astro/]').attr('href'); + bundledCSS = (await fixture.readFile(bundledCSSHREF.replace(/^\/?/, '/'))) + .replace(/\s/g, '') + .replace('/n', ''); + }, + { timeout: 45000 } + ); + + /** All test cases check whether nested styles (i.e. &.nested {}) are correctly transformed */ + it('works in Astro page styles', () => { + assert.match(bundledCSS, /\.astro-page\[data-astro-cid-.*?\]\.nested/); + }); + + it('works in Astro component styles', () => { + assert.match(bundledCSS, /\.astro-component\[data-astro-cid-.*?\]\.nested/); + }); + + it('works in JSX', () => { + assert.match(bundledCSS, /\.solid(\.(w|-)*)*\.nested/); + }); + + it('works in Vue', () => { + assert.match(bundledCSS, /\.vue(\.(w|-)*)*\.nested/); + }); + + it('works in Svelte', () => { + assert.match(bundledCSS, /\.svelte(\.(w|-)*)*\.nested/); + }); + + it('ignores CSS in public/', async () => { + const publicCSS = (await fixture.readFile('/global.css')) + .trim() + .replace(/\s/g, '') + .replace('/n', ''); + // neither minified nor prefixed + assert.equal(eol.lf(publicCSS), '.global{appearance:none;}'); + }); +}); diff --git a/packages/astro/test/postcss.test.js b/packages/astro/test/postcss.test.js deleted file mode 100644 index 2ef15c4e1..000000000 --- a/packages/astro/test/postcss.test.js +++ /dev/null @@ -1,56 +0,0 @@ -import { expect } from 'chai'; -import * as cheerio from 'cheerio'; -import eol from 'eol'; -import { loadFixture } from './test-utils.js'; - -describe('PostCSS', function () { - let fixture; - let bundledCSS; - before(async () => { - this.timeout(45000); // test needs a little more time in CI - fixture = await loadFixture({ - root: './fixtures/postcss', - // test suite was authored when inlineStylesheets defaulted to never - build: { inlineStylesheets: 'never' }, - }); - await fixture.build(); - - // get bundled CSS (will be hashed, hence DOM query) - const html = await fixture.readFile('/index.html'); - const $ = cheerio.load(html); - const bundledCSSHREF = $('link[rel=stylesheet][href^=/_astro/]').attr('href'); - bundledCSS = (await fixture.readFile(bundledCSSHREF.replace(/^\/?/, '/'))) - .replace(/\s/g, '') - .replace('/n', ''); - }); - - /** All test cases check whether nested styles (i.e. &.nested {}) are correctly transformed */ - it('works in Astro page styles', () => { - expect(bundledCSS).to.match(/\.astro-page\[data-astro-cid-.*?\]\.nested/); - }); - - it('works in Astro component styles', () => { - expect(bundledCSS).to.match(/\.astro-component\[data-astro-cid-.*?\]\.nested/); - }); - - it('works in JSX', () => { - expect(bundledCSS).to.match(/\.solid(\.(w|-)*)*\.nested/); - }); - - it('works in Vue', () => { - expect(bundledCSS).to.match(/\.vue(\.(w|-)*)*\.nested/); - }); - - it('works in Svelte', () => { - expect(bundledCSS).to.match(/\.svelte(\.(w|-)*)*\.nested/); - }); - - it('ignores CSS in public/', async () => { - const publicCSS = (await fixture.readFile('/global.css')) - .trim() - .replace(/\s/g, '') - .replace('/n', ''); - // neither minified nor prefixed - expect(eol.lf(publicCSS)).to.equal(`.global{appearance:none;}`); - }); -}); diff --git a/packages/astro/test/preact-compat-component.test.js b/packages/astro/test/preact-compat-component.nodetest.js index 0c1991f12..d9dc9fb71 100644 --- a/packages/astro/test/preact-compat-component.test.js +++ b/packages/astro/test/preact-compat-component.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it, after } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -29,7 +30,7 @@ describe('Preact compat component', () => { const html = await res.text(); const $ = cheerio.load(html); - expect($('#counter-text').text()).to.be.eq('0'); + assert.equal($('#counter-text').text(), '0'); }); }); @@ -42,7 +43,7 @@ describe('Preact compat component', () => { const html = await fixture.readFile('/index.html'); const $ = cheerio.load(html); - expect($('#counter-text').text()).to.be.eq('0'); + assert.equal($('#counter-text').text(), '0'); }); }); }); diff --git a/packages/astro/test/preact-component.test.js b/packages/astro/test/preact-component.nodetest.js index a18d3c97a..e8c89d5bf 100644 --- a/packages/astro/test/preact-component.test.js +++ b/packages/astro/test/preact-component.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -18,7 +19,7 @@ describe('Preact component', () => { const $ = cheerio.load(html); // test 1: Can use class components - expect($('#class-component')).to.have.lengthOf(1); + assert.equal($('#class-component').length, 1); }); it('Can load function component', async () => { @@ -26,9 +27,9 @@ describe('Preact component', () => { const $ = cheerio.load(html); // test 1: Can use function components - expect($('#fn-component')).to.have.lengthOf(1); + assert.equal($('#fn-component').length, 1); // test 2: Can use function components - expect($('#arrow-fn-component')).to.have.lengthOf(1); + assert.equal($('#arrow-fn-component').length, 1); }); it('Can load TS component', async () => { @@ -36,13 +37,13 @@ describe('Preact component', () => { const $ = cheerio.load(html); // test 1: Can use TS components - expect($('.ts-component')).to.have.lengthOf(1); + assert.equal($('.ts-component').length, 1); }); it('Can use hooks', async () => { const html = await fixture.readFile('/hooks/index.html'); const $ = cheerio.load(html); - expect($('#world')).to.have.lengthOf(1); + assert.equal($('#world').length, 1); }); it('Can export a Fragment', async () => { @@ -50,7 +51,7 @@ describe('Preact component', () => { const $ = cheerio.load(html); // test 1: nothing rendered but it didn’t throw - expect($('body').children()).to.have.lengthOf(0); + assert.equal($('body').children().length, 0); }); it('Can use a pragma comment', async () => { @@ -58,8 +59,8 @@ describe('Preact component', () => { const $ = cheerio.load(html); // test 1: rendered the PragmaComment component - expect($('.pragma-comment')).to.have.lengthOf(1); - expect($('.pragma-comment-tsx')).to.have.lengthOf(1); + assert.equal($('.pragma-comment').length, 1); + assert.equal($('.pragma-comment-tsx').length, 1); }); // In moving over to Vite, the jsx-runtime import is now obscured. TODO: update the method of finding this. @@ -79,24 +80,24 @@ describe('Preact component', () => { const jsxRuntime = component.imports.filter((i) => i.specifier.includes('jsx-runtime')); // test 1: preact/jsx-runtime is used for the component - expect(jsxRuntime).to.be.ok; + assert.ok(jsxRuntime); }); it('Can use shared signals between islands', async () => { const html = await fixture.readFile('/signals/index.html'); const $ = cheerio.load(html); - expect($('.preact-signal')).to.have.a.lengthOf(2); + assert.equal($('.preact-signal').length, 2); const sigs1Raw = $($('astro-island')[0]).attr('data-preact-signals'); const sigs2Raw = $($('astro-island')[1]).attr('data-preact-signals'); - expect(sigs1Raw).to.not.be.undefined; - expect(sigs2Raw).to.not.be.undefined; + assert.notEqual(sigs1Raw, undefined); + assert.notEqual(sigs2Raw, undefined); const sigs1 = JSON.parse(sigs1Raw); const sigs2 = JSON.parse(sigs2Raw); - expect(sigs1.count).to.not.be.undefined; - expect(sigs1.count).to.equal(sigs2.count); + assert.notEqual(sigs1.count, undefined); + assert.equal(sigs1.count, sigs2.count); }); }); diff --git a/packages/astro/test/preview-routing.test.js b/packages/astro/test/preview-routing.nodetest.js index a4b83c1c3..fe4a0d111 100644 --- a/packages/astro/test/preview-routing.test.js +++ b/packages/astro/test/preview-routing.nodetest.js @@ -1,8 +1,9 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it, after } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; -describe('Preview Routing', function () { +describe('Preview Routing', () => { describe('build format: directory', () => { describe('Subpath without trailing slash and trailingSlash: never', () => { /** @type {import('./test-utils').Fixture} */ @@ -33,34 +34,34 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath root with trailing slash', async () => { const response = await fixture.fetch('/blog/'); - expect(response.status).to.equal(200); - expect(response.redirected).to.equal(false); + assert.equal(response.status, 200); + assert.equal(response.redirected, false); }); it('200 when loading subpath root without trailing slash', async () => { const response = await fixture.fetch('/blog'); - expect(response.status).to.equal(200); - expect(response.redirected).to.equal(false); + assert.equal(response.status, 200); + assert.equal(response.redirected, false); }); it('404 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -90,37 +91,37 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath root with trailing slash', async () => { const response = await fixture.fetch('/blog/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading subpath root without trailing slash', async () => { const response = await fixture.fetch('/blog'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading another page with subpath not used', async () => { const response = await fixture.fetch('/blog/another'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -150,37 +151,37 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath root with trailing slash', async () => { const response = await fixture.fetch('/blog/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading subpath root without trailing slash', async () => { const response = await fixture.fetch('/blog'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading another page with subpath not used', async () => { const response = await fixture.fetch('/blog/another'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -209,13 +210,13 @@ describe('Preview Routing', function () { it('renders custom 404 for /a', async () => { const res = await fixture.fetch('/a'); - expect(res.status).to.equal(404); + assert.equal(res.status, 404); const html = await res.text(); $ = cheerio.load(html); - expect($('h1').text()).to.equal('Page not found'); - expect($('p').text()).to.equal('This 404 is a static HTML file.'); + assert.equal($('h1').text(), 'Page not found'); + assert.equal($('p').text(), 'This 404 is a static HTML file.'); }); }); }); @@ -250,34 +251,34 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath root with trailing slash', async () => { const response = await fixture.fetch('/blog/'); - expect(response.status).to.equal(200); - expect(response.redirected).to.equal(false); + assert.equal(response.status, 200); + assert.equal(response.redirected, false); }); it('200 when loading subpath root without trailing slash', async () => { const response = await fixture.fetch('/blog'); - expect(response.status).to.equal(200); - expect(response.redirected).to.equal(false); + assert.equal(response.status, 200); + assert.equal(response.redirected, false); }); it('404 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -310,37 +311,37 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath root with trailing slash', async () => { const response = await fixture.fetch('/blog/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading subpath root without trailing slash', async () => { const response = await fixture.fetch('/blog'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading another page with subpath not used', async () => { const response = await fixture.fetch('/blog/another'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -373,37 +374,37 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath root with trailing slash', async () => { const response = await fixture.fetch('/blog/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading subpath root without trailing slash', async () => { const response = await fixture.fetch('/blog'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading another page with subpath not used', async () => { const response = await fixture.fetch('/blog/another'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1/'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -436,27 +437,27 @@ describe('Preview Routing', function () { it('404 when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); it('200 when loading subpath with index.html', async () => { const response = await fixture.fetch('/blog/index.html'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading another page with subpath used', async () => { const response = await fixture.fetch('/blog/another.html'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('200 when loading dynamic route', async () => { const response = await fixture.fetch('/blog/1.html'); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('404 when loading invalid dynamic route', async () => { const response = await fixture.fetch('/blog/2.html'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); }); }); @@ -488,13 +489,13 @@ describe('Preview Routing', function () { it('renders custom 404 for /a', async () => { const res = await fixture.fetch('/a'); - expect(res.status).to.equal(404); + assert.equal(res.status, 404); const html = await res.text(); $ = cheerio.load(html); - expect($('h1').text()).to.equal('Page not found'); - expect($('p').text()).to.equal('This 404 is a static HTML file.'); + assert.equal($('h1').text(), 'Page not found'); + assert.equal($('p').text(), 'This 404 is a static HTML file.'); }); }); }); diff --git a/packages/astro/test/public-base-404.test.js b/packages/astro/test/public-base-404.nodetest.js index 969e2a952..682f38b69 100644 --- a/packages/astro/test/public-base-404.test.js +++ b/packages/astro/test/public-base-404.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it, after } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -6,6 +7,7 @@ describe('Public dev with base', () => { /** @type {import('./test-utils').Fixture} */ let fixture; let $; + let devServer; before(async () => { fixture = await loadFixture({ @@ -13,38 +15,42 @@ describe('Public dev with base', () => { site: 'http://example.com/', base: '/blog', }); - await fixture.startDevServer(); + devServer = await fixture.startDevServer(); + }); + + after(async () => { + await devServer.stop(); }); it('200 when loading /@vite/client', async () => { const response = await fixture.fetch('/@vite/client', { redirect: 'manual', }); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); const content = await response.text(); - expect(content).to.contain('vite'); + assert.equal(content.includes('vite'), true); }); it('200 when loading /blog/twitter.png', async () => { const response = await fixture.fetch('/blog/twitter.png', { redirect: 'manual', }); - expect(response.status).to.equal(200); + assert.equal(response.status, 200); }); it('custom 404 page when loading /blog/blog/', async () => { const response = await fixture.fetch('/blog/blog/'); const html = await response.text(); $ = cheerio.load(html); - expect($('h1').text()).to.equal('404'); + assert.equal($('h1').text(), '404'); }); it('default 404 hint page when loading /', async () => { const response = await fixture.fetch('/'); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); const html = await response.text(); $ = cheerio.load(html); - expect($('a').first().text()).to.equal('/blog'); + assert.equal($('a').first().text(), '/blog'); }); it('default 404 page when loading /none/', async () => { @@ -53,10 +59,10 @@ describe('Public dev with base', () => { accept: 'text/html,*/*', }, }); - expect(response.status).to.equal(404); + assert.equal(response.status, 404); const html = await response.text(); $ = cheerio.load(html); - expect($('h1').text()).to.equal('404: Not found'); - expect($('pre').text()).to.equal('Path: /none/'); + assert.equal($('h1').text(), '404: Not found'); + assert.equal($('pre').text(), 'Path: /none/'); }); }); diff --git a/packages/astro/test/react-and-solid.test.js b/packages/astro/test/react-and-solid.nodetest.js index e15e6e7fa..59126166f 100644 --- a/packages/astro/test/react-and-solid.test.js +++ b/packages/astro/test/react-and-solid.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -14,7 +15,7 @@ describe('Solid app with some React components', () => { it('Reads jsxImportSource from tsconfig', async () => { let html = await fixture.readFile('/index.html'); let $ = cheerio.load(html); - expect($('#example-solid').text()).to.equal('example solidjs component'); - expect($('#example-react').text()).to.equal('example react component'); + assert.equal($('#example-solid').text(), 'example solidjs component'); + assert.equal($('#example-react').text(), 'example react component'); }); }); diff --git a/packages/astro/test/react-jsx-export.test.js b/packages/astro/test/react-jsx-export.nodetest.js index 4a206938a..6392cef03 100644 --- a/packages/astro/test/react-jsx-export.test.js +++ b/packages/astro/test/react-jsx-export.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -42,12 +43,15 @@ describe('react-jsx-export', () => { const html = await fixture.readFile('/index.html'); const $ = cheerio.load(html); - ids.forEach((id) => { - expect($(`#${id}`).text()).to.equal('Example'); - }); + for (const id of ids) { + assert.equal($(`#${id}`).text(), 'Example'); + } }); it('Cannot output React Invalid Hook warning', async () => { - expect(logs.every((log) => log.message.indexOf(reactInvalidHookWarning) === -1)).to.be.true; + assert.equal( + logs.every((log) => log.message.indexOf(reactInvalidHookWarning) === -1), + true + ); }); }); diff --git a/packages/astro/test/redirects.test.js b/packages/astro/test/redirects.nodetest.js index fef889be5..b3b0b0a55 100644 --- a/packages/astro/test/redirects.test.js +++ b/packages/astro/test/redirects.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it, after } from 'node:test'; import { loadFixture } from './test-utils.js'; import testAdapter from './test-adapter.js'; @@ -31,17 +32,17 @@ describe('Astro.redirect', () => { const app = await fixture.loadTestAdapterApp(); const request = new Request('http://example.com/secret'); const response = await app.render(request); - expect(response.status).to.equal(302); - expect(response.headers.get('location')).to.equal('/login'); + assert.equal(response.status, 302); + assert.equal(response.headers.get('location'), '/login'); }); - // ref: https://github.com/withastro/astro/pull/9287 + // ref: https://github.com/withastro/astro/pull/9287#discussion_r1420739810 it.skip('Ignores external redirect', async () => { const app = await fixture.loadTestAdapterApp(); const request = new Request('http://example.com/external/redirect'); const response = await app.render(request); - expect(response.status).to.equal(404); - expect(response.headers.get('location')).to.equal(null); + assert.equal(response.status, 404); + assert.equal(response.headers.get('location'), null); }); it('Warns when used inside a component', async () => { @@ -50,9 +51,10 @@ describe('Astro.redirect', () => { const response = await app.render(request); try { await response.text(); - expect(false).to.equal(true); + assert.equal(false, true); } catch (e) { - expect(e.message).to.equal( + assert.equal( + e.message, 'The response has already been sent to the browser and cannot be altered.' ); } @@ -63,8 +65,8 @@ describe('Astro.redirect', () => { const app = await fixture.loadTestAdapterApp(); const request = new Request('http://example.com/api/redirect'); const response = await app.render(request); - expect(response.status).to.equal(301); - expect(response.headers.get('Location')).to.equal('/test'); + assert.equal(response.status, 301); + assert.equal(response.headers.get('Location'), '/test'); }); it('Uses 308 for non-GET methods', async () => { @@ -73,28 +75,28 @@ describe('Astro.redirect', () => { method: 'POST', }); const response = await app.render(request); - expect(response.status).to.equal(308); + assert.equal(response.status, 308); }); it('Forwards params to the target path - single param', async () => { const app = await fixture.loadTestAdapterApp(); const request = new Request('http://example.com/source/x'); const response = await app.render(request); - expect(response.headers.get('Location')).to.equal('/not-verbatim/target1/x'); + assert.equal(response.headers.get('Location'), '/not-verbatim/target1/x'); }); it('Forwards params to the target path - multiple params', async () => { const app = await fixture.loadTestAdapterApp(); const request = new Request('http://example.com/source/x/y'); const response = await app.render(request); - expect(response.headers.get('Location')).to.equal('/not-verbatim/target2/x/y'); + assert.equal(response.headers.get('Location'), '/not-verbatim/target2/x/y'); }); it('Forwards params to the target path - spread param', async () => { const app = await fixture.loadTestAdapterApp(); const request = new Request('http://example.com/source/x/y/z'); const response = await app.render(request); - expect(response.headers.get('Location')).to.equal('/not-verbatim/target3/x/y/z'); + assert.equal(response.headers.get('Location'), '/not-verbatim/target3/x/y/z'); }); }); }); @@ -126,75 +128,75 @@ describe('Astro.redirect', () => { it("Minifies the HTML emitted when a page that doesn't exist is emitted", async () => { const html = await fixture.readFile('/old/index.html'); - expect(html).to.not.include('\n'); + assert.equal(html.includes('\n'), false); }); it('Includes the meta refresh tag in Astro.redirect pages', async () => { const html = await fixture.readFile('/secret/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/login'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/login'), true); }); it('Includes the meta noindex tag', async () => { const html = await fixture.readFile('/secret/index.html'); - expect(html).to.include('name="robots'); - expect(html).to.include('content="noindex'); + assert.equal(html.includes('name="robots'), true); + assert.equal(html.includes('content="noindex'), true); }); it('Includes a link to the new pages for bots to follow', async () => { const html = await fixture.readFile('/secret/index.html'); - expect(html).to.include('<a href="/login">'); + assert.equal(html.includes('<a href="/login">'), true); }); it('Includes a canonical link', async () => { const html = await fixture.readFile('/secret/index.html'); - expect(html).to.include('<link rel="canonical" href="/login">'); + assert.equal(html.includes('<link rel="canonical" href="/login">'), true); }); it('A 302 status generates a "temporary redirect" through a short delay', async () => { // https://developers.google.com/search/docs/crawling-indexing/301-redirects#metarefresh const html = await fixture.readFile('/secret/index.html'); - expect(html).to.include('content="2;url=/login"'); + assert.equal(html.includes('content="2;url=/login"'), true); }); it('Includes the meta refresh tag in `redirect` config pages', async () => { let html = await fixture.readFile('/one/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/test'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/test'), true); html = await fixture.readFile('/two/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/test'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/test'), true); html = await fixture.readFile('/three/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/test'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/test'), true); html = await fixture.readFile('/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/test'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/test'), true); }); it('Generates page for dynamic routes', async () => { let html = await fixture.readFile('/blog/one/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/articles/one'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/articles/one'), true); html = await fixture.readFile('/blog/two/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/articles/two'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/articles/two'), true); }); it('Generates redirect pages for redirects created by middleware', async () => { let html = await fixture.readFile('/middleware-redirect/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/test'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/test'), true); }); it('falls back to spread rule when dynamic rules should not match', async () => { const html = await fixture.readFile('/more/old/welcome/world/index.html'); - expect(html).to.include('http-equiv="refresh'); - expect(html).to.include('url=/more/new/welcome/world'); + assert.equal(html.includes('http-equiv="refresh'), true); + assert.equal(html.includes('url=/more/new/welcome/world'), true); }); }); @@ -224,23 +226,23 @@ describe('Astro.redirect', () => { let res = await fixture.fetch('/one', { redirect: 'manual', }); - expect(res.status).to.equal(301); - expect(res.headers.get('Location')).to.equal('/'); + assert.equal(res.status, 301); + assert.equal(res.headers.get('Location'), '/'); }); it('performs dynamic redirects', async () => { const response = await fixture.fetch('/more/old/hello', { redirect: 'manual' }); - expect(response.headers.get('Location')).to.equal('/more/hello'); + assert.equal(response.headers.get('Location'), '/more/hello'); }); it('performs dynamic redirects with multiple params', async () => { const response = await fixture.fetch('/more/old/hello/world', { redirect: 'manual' }); - expect(response.headers.get('Location')).to.equal('/more/hello/world'); + assert.equal(response.headers.get('Location'), '/more/hello/world'); }); it.skip('falls back to spread rule when dynamic rules should not match', async () => { const response = await fixture.fetch('/more/old/welcome/world', { redirect: 'manual' }); - expect(response.headers.get('Location')).to.equal('/more/new/welcome/world'); + assert.equal(response.headers.get('Location'), '/more/new/welcome/world'); }); }); }); @@ -266,7 +268,7 @@ describe('Astro.redirect', () => { try { oneHtml = await fixture.readFile('/one/index.html'); } catch {} - expect(oneHtml).be.an('undefined'); + assert.equal(oneHtml, undefined); }); }); }); diff --git a/packages/astro/test/reexport-astro-containing-client-component.test.js b/packages/astro/test/reexport-astro-containing-client-component.nodetest.js index 8b37e8180..af2906210 100644 --- a/packages/astro/test/reexport-astro-containing-client-component.test.js +++ b/packages/astro/test/reexport-astro-containing-client-component.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -13,7 +14,7 @@ describe('Re-exported astro components with client components', () => { it('Is able to build and renders and stuff', async () => { const html = await fixture.readFile('/index.html'); const $ = cheerio.load(html); - expect($('astro-island').length).to.equal(1); - expect($('astro-island').attr('component-export')).to.equal('One'); + assert.equal($('astro-island').length, 1); + assert.equal($('astro-island').attr('component-export'), 'One'); }); }); diff --git a/packages/astro/test/remote-css.test.js b/packages/astro/test/remote-css.nodetest.js index 4f9a25e35..b6b0b03a1 100644 --- a/packages/astro/test/remote-css.test.js +++ b/packages/astro/test/remote-css.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -21,7 +22,7 @@ describe('Remote CSS', () => { const relPath = $('link').attr('href'); const css = await fixture.readFile(relPath); - expect(css).to.match(/https:\/\/unpkg.com\/open-props/); - expect(css).to.match(/body/); + assert.match(css, /https:\/\/unpkg.com\/open-props/); + assert.match(css, /body/); }); }); diff --git a/packages/astro/test/root-srcdir-css.test.js b/packages/astro/test/root-srcdir-css.nodetest.js index abb452db1..581cce7a3 100644 --- a/packages/astro/test/root-srcdir-css.test.js +++ b/packages/astro/test/root-srcdir-css.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it } from 'node:test'; import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -20,6 +21,6 @@ describe('srcDir', () => { const relPath = $('link').attr('href'); const css = await fixture.readFile(relPath); - expect(css).to.match(/body\{color:green\}/); + assert.match(css, /body\{color:green\}/); }); }); diff --git a/packages/astro/test/route-manifest.test.js b/packages/astro/test/route-manifest.nodetest.js index 169404833..169404833 100644 --- a/packages/astro/test/route-manifest.test.js +++ b/packages/astro/test/route-manifest.nodetest.js diff --git a/packages/astro/test/routing-priority.test.js b/packages/astro/test/routing-priority.nodetest.js index 586978d4f..b87c353db 100644 --- a/packages/astro/test/routing-priority.test.js +++ b/packages/astro/test/routing-priority.nodetest.js @@ -1,4 +1,5 @@ -import { expect } from 'chai'; +import assert from 'node:assert/strict'; +import { before, describe, it, after } from 'node:test'; import { load as cheerioLoad } from 'cheerio'; import { loadFixture } from './test-utils.js'; @@ -145,7 +146,7 @@ describe('Routing priority', () => { const htmlFile = isEndpoint ? url : `${appendForwardSlash(url)}index.html`; if (fourOhFour) { - expect(fixture.pathExists(htmlFile)).to.be.false; + assert.equal(fixture.pathExists(htmlFile), false); return; } @@ -153,15 +154,15 @@ describe('Routing priority', () => { const $ = cheerioLoad(html); if (h1) { - expect($('h1').text()).to.equal(h1); + assert.equal($('h1').text(), h1); } if (p) { - expect($('p').text()).to.equal(p); + assert.equal($('p').text(), p); } if (htmlMatch) { - expect(html).to.equal(htmlMatch); + assert.equal(html, htmlMatch); } }); }); @@ -192,20 +193,20 @@ describe('Routing priority', () => { const $ = cheerioLoad(html); if (fourOhFour) { - expect($('title').text()).to.equal('404: Not Found'); + assert.equal($('title').text(), '404: Not Found'); return; } if (h1) { - expect($('h1').text()).to.equal(h1); + assert.equal($('h1').text(), h1); } if (p) { - expect($('p').text()).to.equal(p); + assert.equal($('p').text(), p); } if (htmlMatch) { - expect(html).to.equal(htmlMatch); + assert.equal(html, htmlMatch); } }); @@ -218,20 +219,20 @@ describe('Routing priority', () => { const $ = cheerioLoad(html); if (fourOhFour) { - expect($('title').text()).to.equal('404: Not Found'); + assert.equal($('title').text(), '404: Not Found'); return; } if (h1) { - expect($('h1').text()).to.equal(h1); + assert.equal($('h1').text(), h1); } if (p) { - expect($('p').text()).to.equal(p); + assert.equal($('p').text(), p); } if (htmlMatch) { - expect(html).to.equal(htmlMatch); + assert.equal(html, htmlMatch); } }); @@ -243,20 +244,20 @@ describe('Routing priority', () => { const $ = cheerioLoad(html); if (fourOhFour) { - expect($('title').text()).to.equal('404: Not Found'); + assert.equal($('title').text(), '404: Not Found'); return; } if (h1) { - expect($('h1').text()).to.equal(h1); + assert.equal($('h1').text(), h1); } if (p) { - expect($('p').text()).to.equal(p); + assert.equal($('p').text(), p); } if (htmlMatch) { - expect(html).to.equal(htmlMatch); + assert.equal(html, htmlMatch); } }); }); |