summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Bjorn Lu <bjornlu.dev@gmail.com> 2023-06-07 18:04:34 +0800
committerGravatar GitHub <noreply@github.com> 2023-06-07 18:04:34 +0800
commit9c525d3f11edde148b7bc9cd12dd10b194fcc0b3 (patch)
tree58aaf3c61bb3a5fe6f479b1c27901a1946230d7d
parenta4176f98b86f69bfefd441b7b6fd4c82f70e5a9d (diff)
downloadastro-9c525d3f11edde148b7bc9cd12dd10b194fcc0b3.tar.gz
astro-9c525d3f11edde148b7bc9cd12dd10b194fcc0b3.tar.zst
astro-9c525d3f11edde148b7bc9cd12dd10b194fcc0b3.zip
Refactor some integration tests (#7303)
-rw-r--r--packages/astro/test/astro-get-static-paths.test.js2
-rw-r--r--packages/astro/test/astro-markdown-plugins.test.js157
-rw-r--r--packages/astro/test/cli.test.js20
-rw-r--r--packages/astro/test/client-address.test.js9
-rw-r--r--packages/astro/test/core-image.test.js95
-rw-r--r--packages/astro/test/fixtures/core-image/service.mjs23
-rw-r--r--packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro2
-rw-r--r--packages/astro/test/minification-html.test.js2
-rw-r--r--packages/astro/test/ssr-prerender-get-static-paths.test.js4
-rw-r--r--packages/astro/test/test-image-service.js31
-rw-r--r--packages/astro/test/units/logger/locale.test.js21
-rw-r--r--packages/astro/test/units/shiki/shiki.test.js6
12 files changed, 192 insertions, 180 deletions
diff --git a/packages/astro/test/astro-get-static-paths.test.js b/packages/astro/test/astro-get-static-paths.test.js
index 9914eb938..6294e1926 100644
--- a/packages/astro/test/astro-get-static-paths.test.js
+++ b/packages/astro/test/astro-get-static-paths.test.js
@@ -51,7 +51,7 @@ describe('getStaticPaths - dev calls', () => {
});
after(async () => {
- devServer.stop();
+ await devServer.stop();
});
it('only calls getStaticPaths once', async () => {
diff --git a/packages/astro/test/astro-markdown-plugins.test.js b/packages/astro/test/astro-markdown-plugins.test.js
index 63f6eda67..c545f3c7a 100644
--- a/packages/astro/test/astro-markdown-plugins.test.js
+++ b/packages/astro/test/astro-markdown-plugins.test.js
@@ -3,14 +3,20 @@ import * as cheerio from 'cheerio';
import { loadFixture } from './test-utils.js';
import addClasses from './fixtures/astro-markdown-plugins/add-classes.mjs';
-async function buildFixture(config) {
- const fixture = await loadFixture({
- root: './fixtures/astro-markdown-plugins/',
- ...config,
- });
- await fixture.build();
- return fixture;
-}
+const defaultMarkdownConfig = {
+ gfm: true,
+ smartypants: true,
+ remarkPlugins: [
+ remarkExamplePlugin,
+ 'remark-code-titles',
+ ['rehype-autolink-headings', { behavior: 'prepend' }],
+ ],
+ rehypePlugins: [
+ 'rehype-slug',
+ ['rehype-toc', { headings: ['h2', 'h3'] }],
+ [addClasses, { 'h1,h2,h3': 'title' }],
+ ],
+};
function remarkExamplePlugin() {
return (tree) => {
@@ -22,97 +28,96 @@ function remarkExamplePlugin() {
}
describe('Astro Markdown plugins', () => {
- it('Can render markdown with plugins', async () => {
- const fixture = await buildFixture({
- markdown: {
- remarkPlugins: [
- 'remark-code-titles',
- ['rehype-autolink-headings', { behavior: 'prepend' }],
- ],
- rehypePlugins: [
- 'rehype-slug',
- ['rehype-toc', { headings: ['h2', 'h3'] }],
- [addClasses, { 'h1,h2,h3': 'title' }],
- ],
- },
+ describe('Default test plugins', () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({
+ root: './fixtures/astro-markdown-plugins/',
+ markdown: defaultMarkdownConfig,
+ });
+ await fixture.build();
});
- const html = await fixture.readFile('/index.html');
- const $ = cheerio.load(html);
- // test 1: Added a TOC
- expect($('.toc')).to.have.lengthOf(1);
+ it('Can render markdown with plugins', async () => {
+ const html = await fixture.readFile('/index.html');
+ const $ = cheerio.load(html);
- // test 2: Added .title to h1
- expect($('#hello-world').hasClass('title')).to.equal(true);
- });
+ // test 1: Added a TOC
+ expect($('.toc')).to.have.lengthOf(1);
- // Asserts Astro 1.0 behavior is removed. Test can be removed in Astro 3.0.
- it('Still applies default plugins when user plugins are provided', async () => {
- const fixture = await buildFixture({
- markdown: {
- remarkPlugins: [remarkExamplePlugin],
- rehypePlugins: [[addClasses, { 'h1,h2,h3': 'title' }]],
- },
+ // test 2: Added .title to h1
+ expect($('#hello-world').hasClass('title')).to.equal(true);
});
- const gfmHtml = await fixture.readFile('/with-gfm/index.html');
- const $1 = cheerio.load(gfmHtml);
- expect($1('a[href="https://example.com"]')).to.have.lengthOf(1);
- const smartypantsHtml = await fixture.readFile('/with-smartypants/index.html');
- const $2 = cheerio.load(smartypantsHtml);
- expect($2('p').html()).to.equal('“Smartypants” is — awesome');
+ // Asserts Astro 1.0 behavior is removed. Test can be removed in Astro 3.0.
+ it('Still applies default plugins when user plugins are provided', async () => {
+ const gfmHtml = await fixture.readFile('/with-gfm/index.html');
+ const $1 = cheerio.load(gfmHtml);
+ expect($1('a[href="https://example.com"]')).to.have.lengthOf(1);
- testRemark(gfmHtml);
- testRehype(gfmHtml, '#github-flavored-markdown-test');
- });
+ const smartypantsHtml = await fixture.readFile('/with-smartypants/index.html');
+ const $2 = cheerio.load(smartypantsHtml);
+ expect($2('p').html()).to.equal('“Smartypants” is — awesome');
- for (const gfm of [true, false]) {
- it(`Handles GFM when gfm = ${gfm}`, async () => {
- const fixture = await buildFixture({
- markdown: {
- remarkPlugins: [remarkExamplePlugin],
- rehypePlugins: [[addClasses, { 'h1,h2,h3': 'title' }]],
- gfm,
- },
- });
+ testRemark(gfmHtml);
+ testRehype(gfmHtml, '#github-flavored-markdown-test');
+ });
+
+ it(`Handles GFM when gfm = true`, async () => {
const html = await fixture.readFile('/with-gfm/index.html');
const $ = cheerio.load(html);
// test 1: GFM autolink applied correctly
- if (gfm === true) {
- expect($('a[href="https://example.com"]')).to.have.lengthOf(1);
- } else {
- expect($('a[href="https://example.com"]')).to.have.lengthOf(0);
- }
+ expect($('a[href="https://example.com"]')).to.have.lengthOf(1);
testRemark(html);
testRehype(html, '#github-flavored-markdown-test');
});
- }
-
- for (const smartypants of [true, false]) {
- it(`Handles SmartyPants when smartypants = ${smartypants}`, async () => {
- const fixture = await buildFixture({
- markdown: {
- remarkPlugins: [remarkExamplePlugin],
- rehypePlugins: [[addClasses, { 'h1,h2,h3': 'title' }]],
- smartypants,
- },
- });
+
+ it(`Handles SmartyPants when smartypants = true`, async () => {
const html = await fixture.readFile('/with-smartypants/index.html');
const $ = cheerio.load(html);
- // test 1: GFM autolink applied correctly
- if (smartypants === true) {
- expect($('p').html()).to.equal('“Smartypants” is — awesome');
- } else {
- expect($('p').html()).to.equal('"Smartypants" is -- awesome');
- }
+ // test 1: smartypants applied correctly
+ expect($('p').html()).to.equal('“Smartypants” is — awesome');
testRemark(html);
testRehype(html, '#smartypants-test');
});
- }
+ });
+
+ it(`Handles GFM when gfm = false`, async () => {
+ const fixture = await loadFixture({
+ root: './fixtures/astro-markdown-plugins/',
+ markdown: { ...defaultMarkdownConfig, gfm: false },
+ });
+ await fixture.build();
+
+ const html = await fixture.readFile('/with-gfm/index.html');
+ const $ = cheerio.load(html);
+
+ expect($('a[href="https://example.com"]')).to.have.lengthOf(0);
+
+ testRemark(html);
+ testRehype(html, '#github-flavored-markdown-test');
+ });
+
+ it(`Handles SmartyPants when smartypants = false`, async () => {
+ const fixture = await loadFixture({
+ root: './fixtures/astro-markdown-plugins/',
+ markdown: { ...defaultMarkdownConfig, smartypants: false },
+ });
+ await fixture.build();
+
+ const html = await fixture.readFile('/with-smartypants/index.html');
+ const $ = cheerio.load(html);
+
+ expect($('p').html()).to.equal('"Smartypants" is -- awesome');
+
+ testRemark(html);
+ testRehype(html, '#smartypants-test');
+ });
});
function testRehype(html, headingId) {
diff --git a/packages/astro/test/cli.test.js b/packages/astro/test/cli.test.js
index 09918a451..7626cc495 100644
--- a/packages/astro/test/cli.test.js
+++ b/packages/astro/test/cli.test.js
@@ -183,23 +183,3 @@ describe('astro cli', () => {
});
});
});
-
-describe('astro cli i18n', () => {
- const LOCALES = ['en_US', 'sv_SE', 'es_419.UTF-8', 'es_ES@euro', 'C'];
- LOCALES.forEach((locale) => {
- it(`astro does NOT throw on "${locale}" locales`, async () => {
- const projectRootURL = new URL('./fixtures/astro-basic/', import.meta.url);
- let error = null;
- try {
- const proc = cli('dev', '--root', fileURLToPath(projectRootURL), {
- env: { LANG: locale },
- });
- await parseCliDevStart(proc);
- } catch (e) {
- console.log(e);
- error = e.message;
- }
- expect(error).to.be.null;
- });
- });
-});
diff --git a/packages/astro/test/client-address.test.js b/packages/astro/test/client-address.test.js
index a3c65835d..e351b44cd 100644
--- a/packages/astro/test/client-address.test.js
+++ b/packages/astro/test/client-address.test.js
@@ -1,7 +1,6 @@
import { expect } from 'chai';
-import { loadFixture } from './test-utils.js';
+import { loadFixture, silentLogging } from './test-utils.js';
import testAdapter from './test-adapter.js';
-import { nodeLogDestination } from '../dist/core/logger/node.js';
import * as cheerio from 'cheerio';
describe('Astro.clientAddress', () => {
@@ -110,11 +109,7 @@ describe('Astro.clientAddress', () => {
before(async () => {
// We expect an error, so silence the output
- const logging = {
- dest: nodeLogDestination,
- level: 'silent',
- };
- devServer = await fixture.startDevServer({ logging });
+ devServer = await fixture.startDevServer({ logging: silentLogging });
});
after(async () => {
diff --git a/packages/astro/test/core-image.test.js b/packages/astro/test/core-image.test.js
index 4fec48284..f7a537e98 100644
--- a/packages/astro/test/core-image.test.js
+++ b/packages/astro/test/core-image.test.js
@@ -2,10 +2,10 @@ import { expect } from 'chai';
import * as cheerio from 'cheerio';
import { basename } from 'node:path';
import { Writable } from 'node:stream';
-import { fileURLToPath } from 'node:url';
import { removeDir } from '../dist/core/fs/index.js';
import testAdapter from './test-adapter.js';
import { loadFixture } from './test-utils.js';
+import { testImageService } from './test-image-service.js';
describe('astro:image', () => {
/** @type {import('./test-utils').Fixture} */
@@ -23,6 +23,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService({ foo: 'bar' }),
+ },
});
devServer = await fixture.startDevServer({
@@ -377,6 +380,32 @@ describe('astro:image', () => {
expect($('img').attr('src').includes('/src')).to.equal(true);
});
});
+
+ describe('custom service', () => {
+ it('custom service implements getHTMLAttributes', async () => {
+ const response = await fixture.fetch('/');
+ const html = await response.text();
+
+ const $ = cheerio.load(html);
+ expect($('#local img').attr('data-service')).to.equal('my-custom-service');
+ });
+
+ it('custom service works in Markdown', async () => {
+ const response = await fixture.fetch('/post');
+ const html = await response.text();
+
+ const $ = cheerio.load(html);
+ expect($('img').attr('data-service')).to.equal('my-custom-service');
+ });
+
+ it('gets service config', async () => {
+ const response = await fixture.fetch('/');
+ const html = await response.text();
+
+ const $ = cheerio.load(html);
+ expect($('#local img').attr('data-service-config')).to.equal('bar');
+ });
+ });
});
describe('proper errors', () => {
@@ -391,6 +420,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService(),
+ },
});
devServer = await fixture.startDevServer({
@@ -456,6 +488,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService(),
+ },
base: '/blog',
});
await fixture.build();
@@ -509,6 +544,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService(),
+ },
base: '/blog',
});
await fixtureWithBase.build();
@@ -530,6 +568,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService(),
+ },
});
// Remove cache directory
removeDir(new URL('./fixtures/core-image-ssg/node_modules/.astro', import.meta.url));
@@ -693,6 +734,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService(),
+ },
});
devServer = await fixture.startDevServer();
});
@@ -717,6 +761,9 @@ describe('astro:image', () => {
experimental: {
assets: true,
},
+ image: {
+ service: testImageService(),
+ },
});
await fixture.build();
});
@@ -746,50 +793,4 @@ describe('astro:image', () => {
expect(imgData).to.be.an.instanceOf(Buffer);
});
});
-
- describe('custom service', () => {
- /** @type {import('./test-utils').DevServer} */
- let devServer;
- before(async () => {
- fixture = await loadFixture({
- root: './fixtures/core-image/',
- experimental: {
- assets: true,
- },
- image: {
- service: {
- entrypoint: fileURLToPath(
- new URL('./fixtures/core-image/service.mjs', import.meta.url)
- ),
- config: { foo: 'bar' },
- },
- },
- });
- devServer = await fixture.startDevServer();
- });
-
- it('custom service implements getHTMLAttributes', async () => {
- const response = await fixture.fetch('/');
- const html = await response.text();
-
- const $ = cheerio.load(html);
- expect($('#local img').attr('data-service')).to.equal('my-custom-service');
- });
-
- it('custom service works in Markdown', async () => {
- const response = await fixture.fetch('/post');
- const html = await response.text();
-
- const $ = cheerio.load(html);
- expect($('img').attr('data-service')).to.equal('my-custom-service');
- });
-
- it('gets service config', async () => {
- const response = await fixture.fetch('/');
- const html = await response.text();
-
- const $ = cheerio.load(html);
- expect($('#local img').attr('data-service-config')).to.equal('bar');
- });
- });
});
diff --git a/packages/astro/test/fixtures/core-image/service.mjs b/packages/astro/test/fixtures/core-image/service.mjs
deleted file mode 100644
index 646622f51..000000000
--- a/packages/astro/test/fixtures/core-image/service.mjs
+++ /dev/null
@@ -1,23 +0,0 @@
-import squoosh from 'astro/assets/services/squoosh';
-
-const service = {
- validateOptions(options) {
- return squoosh.validateOptions(options);
- },
- getURL(options) {
- return squoosh.getURL(options);
- },
- getHTMLAttributes(options, serviceConfig) {
- options['data-service'] = 'my-custom-service';
- options['data-service-config'] = serviceConfig.foo;
- return squoosh.getHTMLAttributes(options);
- },
- parseURL(url) {
- return squoosh.parseURL(url);
- },
- transform(buffer, options) {
- return squoosh.transform(buffer, options);
- },
-};
-
-export default service;
diff --git a/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro b/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro
index 5ed54c3b8..36f64e846 100644
--- a/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro
+++ b/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro
@@ -4,6 +4,6 @@ import { One as OneWrapper } from '../components/One';
<html>
<head><title>Testing</title></head>
<body>
- <OneWrapper client:load />
+ <OneWrapper />
</body>
</html>
diff --git a/packages/astro/test/minification-html.test.js b/packages/astro/test/minification-html.test.js
index cad8db304..bd86e233b 100644
--- a/packages/astro/test/minification-html.test.js
+++ b/packages/astro/test/minification-html.test.js
@@ -33,7 +33,7 @@ describe('HTML minification', () => {
});
after(async () => {
- devServer.stop();
+ await devServer.stop();
});
it('should emit compressed HTML in the emitted file', async () => {
diff --git a/packages/astro/test/ssr-prerender-get-static-paths.test.js b/packages/astro/test/ssr-prerender-get-static-paths.test.js
index 6316561d6..08e3060f0 100644
--- a/packages/astro/test/ssr-prerender-get-static-paths.test.js
+++ b/packages/astro/test/ssr-prerender-get-static-paths.test.js
@@ -56,7 +56,7 @@ describe('Prerender', () => {
});
after(async () => {
- devServer.stop();
+ await devServer.stop();
});
it('only calls prerender getStaticPaths once', async () => {
@@ -188,7 +188,7 @@ describe('Prerender', () => {
});
after(async () => {
- devServer.stop();
+ await devServer.stop();
});
it('only calls hybrid getStaticPaths once', async () => {
diff --git a/packages/astro/test/test-image-service.js b/packages/astro/test/test-image-service.js
new file mode 100644
index 000000000..ebdbb0765
--- /dev/null
+++ b/packages/astro/test/test-image-service.js
@@ -0,0 +1,31 @@
+import { fileURLToPath } from 'node:url';
+import { baseService } from '../dist/assets/services/service.js';
+
+/**
+ * stub image service that returns images as-is without optimization
+ * @param {{ foo?: string }} [config]
+ */
+export function testImageService(config = {}) {
+ return {
+ entrypoint: fileURLToPath(import.meta.url),
+ config,
+ };
+}
+
+/** @type {import("../dist/@types/astro").LocalImageService} */
+export default {
+ ...baseService,
+ getHTMLAttributes(options, serviceConfig) {
+ options['data-service'] = 'my-custom-service';
+ if (serviceConfig.foo) {
+ options['data-service-config'] = serviceConfig.foo;
+ }
+ return baseService.getHTMLAttributes(options);
+ },
+ async transform(buffer, transform) {
+ return {
+ data: buffer,
+ format: transform.format,
+ };
+ },
+};
diff --git a/packages/astro/test/units/logger/locale.test.js b/packages/astro/test/units/logger/locale.test.js
new file mode 100644
index 000000000..c8e115f20
--- /dev/null
+++ b/packages/astro/test/units/logger/locale.test.js
@@ -0,0 +1,21 @@
+import { expect } from 'chai';
+
+const LOCALES = ['en_US', 'sv_SE', 'es_419.UTF-8', 'es_ES@euro', 'C'];
+
+describe('logger - dateTimeFormat', () => {
+ const originalLang = process.env.LANG;
+
+ after(() => {
+ process.env.LANG = originalLang;
+ });
+
+ LOCALES.forEach((locale, i) => {
+ it(`works with process.env.LANG="${locale}"`, async () => {
+ process.env.LANG = locale;
+ const { dateTimeFormat } = await import('../../../dist/core/logger/core.js?cachebust=' + i);
+ expect(() => {
+ dateTimeFormat.format(new Date());
+ }).not.to.throw();
+ });
+ });
+});
diff --git a/packages/astro/test/units/shiki/shiki.test.js b/packages/astro/test/units/shiki/shiki.test.js
index 9f65e2505..21f93dce8 100644
--- a/packages/astro/test/units/shiki/shiki.test.js
+++ b/packages/astro/test/units/shiki/shiki.test.js
@@ -20,7 +20,8 @@ describe('<Code />', () => {
it('uses the bundles themes for built-in themes', async () => {
const { resolveHighlighterOptions } = mod;
- const opts = await resolveHighlighterOptions({ theme: 'css-variables' });
+ // NOTE: pass empty `langs` to prevent Shiki from loading all langs by default, which slows down the test
+ const opts = await resolveHighlighterOptions({ theme: 'css-variables', langs: [] });
const themes = opts.themes;
expect(themes).to.have.a.lengthOf(1);
@@ -29,7 +30,8 @@ describe('<Code />', () => {
it('uses the string theme name for custom themes', async () => {
const { resolveHighlighterOptions } = mod;
- const opts = await resolveHighlighterOptions({ theme: 'some-custom-theme' });
+ // NOTE: pass empty `langs` to prevent Shiki from loading all langs by default, which slows down the test
+ const opts = await resolveHighlighterOptions({ theme: 'some-custom-theme', langs: [] });
const themes = opts.themes;
expect(themes).to.have.a.lengthOf(1);