Bug 6672 (#7062)
* fix miss a head when the templaterender has a promise * fix * add some test * test files move to md directory * fix add * delect file --------- Co-authored-by: wuls <linsheng.wu@beantechs.com>
This commit is contained in:
parent
29da199e9a
commit
cf621340b0
10 changed files with 138 additions and 0 deletions
5
.changeset/small-wombats-know.md
Normal file
5
.changeset/small-wombats-know.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'astro': patch
|
||||
---
|
||||
|
||||
fix miss a head when the templaterender has a promise
|
|
@ -50,6 +50,9 @@ export class AstroComponentInstance {
|
|||
value = await value;
|
||||
}
|
||||
if (isHeadAndContent(value)) {
|
||||
if (this.result.extraHead.length === 0 && value.head) {
|
||||
yield renderChild(value.head);
|
||||
}
|
||||
yield* value.content;
|
||||
} else {
|
||||
yield* renderChild(value);
|
||||
|
|
46
packages/integrations/mdx/test/astro-content-css.test.js
Normal file
46
packages/integrations/mdx/test/astro-content-css.test.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
import { expect } from 'chai';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from '../../../astro/test/test-utils.js';
|
||||
import mdx from '@astrojs/mdx';
|
||||
|
||||
describe('build css from the component', async () => {
|
||||
let fixture;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture({ root: new URL('./fixtures/astro-content-css/', import.meta.url),integrations: [mdx()], });
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
describe('Build', () => {
|
||||
before(async () => {
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('including css and js from the component in pro', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
expect($('link[href$=".css"]').attr('href')).to.match(/^\/_astro\//);
|
||||
expect($('script[src$=".js"]').attr('src')).to.match(/^\/_astro\//);
|
||||
});
|
||||
})
|
||||
|
||||
describe('Dev', () => {
|
||||
let devServer
|
||||
before(async () => {
|
||||
devServer = await fixture.startDevServer();
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
devServer.stop();
|
||||
});
|
||||
|
||||
it('ncluding css and js from the component in Dev', async () => {
|
||||
let res = await fixture.fetch(`/`);
|
||||
expect(res.status).to.equal(200);
|
||||
const html = await res.text();
|
||||
const $ = cheerio.load(html);
|
||||
expect($.html()).to.include('CornflowerBlue');
|
||||
expect($('script[src$=".js"]').attr('src')).to.include('astro');
|
||||
});
|
||||
})
|
||||
})
|
11
packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs
vendored
Normal file
11
packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
|
||||
import mdx from "@astrojs/mdx";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
build: {
|
||||
format: 'file'
|
||||
},
|
||||
integrations: [mdx()]
|
||||
});
|
9
packages/integrations/mdx/test/fixtures/astro-content-css/package.json
vendored
Normal file
9
packages/integrations/mdx/test/fixtures/astro-content-css/package.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"name": "@test/astro-content-css",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"astro": "workspace:*",
|
||||
"@astrojs/mdx": "workspace:*"
|
||||
}
|
||||
}
|
12
packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts
vendored
Normal file
12
packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
// 1. Import utilities from `astro:content`
|
||||
import { z, defineCollection } from 'astro:content';
|
||||
// 2. Define a schema for each collection you'd like to validate.
|
||||
const dynamicCollection = defineCollection({
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
}),
|
||||
});
|
||||
// 3. Export a single `collections` object to register your collection(s)
|
||||
export const collections = {
|
||||
dynamic: dynamicCollection,
|
||||
};
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
const { text } = Astro.props;
|
||||
---
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head><meta charset="utf-8" /></head>
|
||||
<body>
|
||||
<div id="first">1st components with js. Props: {text}. <span>Styles</span>. JS: </div>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
document.querySelector('#first').innerHTML += 'works';
|
||||
</script>
|
||||
<style>
|
||||
#first > span {
|
||||
color: CornflowerBlue;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: 'First component'
|
||||
---
|
||||
|
||||
import FirstDynamicComponentWithJS from './FirstComponentWithJS.astro';
|
||||
|
||||
<FirstDynamicComponentWithJS text={props.mdProps} />
|
||||
|
||||
Additional text from mdx 'first-component-with-js'
|
16
packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro
vendored
Normal file
16
packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
|
||||
const entries = await getCollection('dynamic');
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head><meta charset="utf-8" /></head>
|
||||
<body>
|
||||
{entries.map(async entry => {
|
||||
const { Content } = await entry.render();
|
||||
return <Content mdProps="work" />;
|
||||
})}
|
||||
</body>
|
||||
</html>
|
|
@ -4244,6 +4244,15 @@ importers:
|
|||
specifier: ^4.3.1
|
||||
version: 4.3.1(@types/node@18.16.3)(sass@1.52.2)
|
||||
|
||||
packages/integrations/mdx/test/fixtures/astro-content-css:
|
||||
dependencies:
|
||||
'@astrojs/mdx':
|
||||
specifier: workspace:*
|
||||
version: link:../../..
|
||||
astro:
|
||||
specifier: workspace:*
|
||||
version: link:../../../../../astro
|
||||
|
||||
packages/integrations/mdx/test/fixtures/css-head-mdx:
|
||||
dependencies:
|
||||
'@astrojs/mdx':
|
||||
|
|
Loading…
Reference in a new issue