Brings back astro-dynamic tests (#1548)

This commit is contained in:
Matthew Phillips 2021-10-13 16:57:27 -04:00 committed by Drew Powers
parent b418ae31b8
commit f199c69eab
7 changed files with 29 additions and 50 deletions

View file

@ -40,7 +40,7 @@
"test": "mocha --parallel --timeout 15000" "test": "mocha --parallel --timeout 15000"
}, },
"dependencies": { "dependencies": {
"@astrojs/compiler": "^0.1.12", "@astrojs/compiler": "^0.1.13",
"@astrojs/language-server": "^0.7.16", "@astrojs/language-server": "^0.7.16",
"@astrojs/markdown-remark": "^0.3.1", "@astrojs/markdown-remark": "^0.3.1",
"@astrojs/markdown-support": "0.3.1", "@astrojs/markdown-support": "0.3.1",

View file

@ -1,5 +1,3 @@
/**
* UNCOMMENT: fix transform error and "window is not defined" Vite error
import { expect } from 'chai'; import { expect } from 'chai';
import cheerio from 'cheerio'; import cheerio from 'cheerio';
import { loadFixture } from './test-utils.js'; import { loadFixture } from './test-utils.js';
@ -12,37 +10,29 @@ before(async () => {
}); });
describe('Dynamic components', () => { describe('Dynamic components', () => {
it('Loads client-only packages', async () => { it('Loads packages that only run code in client', async () => {
const html = await fixture.fetch('/index.html'); const html = await fixture.readFile('/index.html');
// Grab the react-dom import const $ = cheerio.load(html)
const exp = /import\("(.+?)"\)/g; expect($('script').length).to.eq(2)
let match, reactRenderer;
while ((match = exp.exec(html))) {
if (match[1].includes('renderers/renderer-react/client.js')) {
reactRenderer = match[1];
}
}
// test 1: React renderer is on the page
expect(reactRenderer).to.be.ok;
// test 2: Can load React renderer
// const result = await fixture.fetch(reactRenderer);
// expect(result.status).to.equal(200);
}); });
it('Loads pages using client:media hydrator', async () => { it('Loads pages using client:media hydrator', async () => {
const root = new URL('http://example.com/media/index.html');
const html = await fixture.readFile('/media/index.html'); const html = await fixture.readFile('/media/index.html');
const $ = cheerio.load(html);
// test 1: static value rendered // test 1: static value rendered
expect(html).to.include(`value: "(max-width: 700px)"`);
let js = await fixture.readFile(new URL($('script').attr('src'), root).pathname);
expect(js).to.include(`value:"(max-width: 700px)"`);
// test 2: dynamic value rendered // test 2: dynamic value rendered
expect(html).to.include(`value: "(max-width: 600px)"`); js = await fixture.readFile(new URL($('script').eq(1).attr('src'), root).pathname);
expect(js).to.include(`value:"(max-width: 600px)"`);
}); });
it('Loads pages using client:only hydrator', async () => { it.skip('Loads pages using client:only hydrator', async () => {
const html = await fixture.readFile('/client-only/index.html'); const html = await fixture.readFile('/client-only/index.html');
const $ = cheerio.load(html); const $ = cheerio.load(html);
@ -66,6 +56,3 @@ describe('Dynamic components', () => {
// expect(result.status).to.equal(200); // expect(result.status).to.equal(200);
}); });
}); });
*/
it.skip('is skipped', () => {});

View file

@ -1,12 +0,0 @@
---
import CounterRenamed from '../components/Counter.jsx';
import SvelteCounterRenamed from '../components/SvelteCounter.svelte';
---
<html>
<head><title>Dynamic pages</title></head>
<body>
<CounterRenamed client:load />
<SvelteCounterRenamed client:load />
</body>
</html>

View file

@ -8,6 +8,6 @@ import SvelteCounter from '../components/SvelteCounter.svelte';
<Counter client:load /> <Counter client:load />
<!-- Including the original hydration syntax to test backwards compatibility --> <!-- Including the original hydration syntax to test backwards compatibility -->
<SvelteCounter:load /> <SvelteCounter client:load />
</body> </body>
</html> </html>

View file

@ -9,16 +9,20 @@ function check(Component, props, children) {
return BaseComponent.isPrototypeOf(Component); return BaseComponent.isPrototypeOf(Component);
} }
const { html } = renderToStaticMarkup(Component, props, children); try {
const { html } = renderToStaticMarkup(Component, props, children);
if (typeof html !== 'string') { if (typeof html !== 'string') {
return false;
}
// There are edge cases (SolidJS) where Preact *might* render a string,
// but components would be <undefined></undefined>
return !/\<undefined\>/.test(html);
} catch {
return false; return false;
} }
// There are edge cases (SolidJS) where Preact *might* render a string,
// but components would be <undefined></undefined>
return !/\<undefined\>/.test(html);
} }
function renderToStaticMarkup(Component, props, children) { function renderToStaticMarkup(Component, props, children) {

View file

@ -106,10 +106,10 @@
"@algolia/logger-common" "4.10.5" "@algolia/logger-common" "4.10.5"
"@algolia/requester-common" "4.10.5" "@algolia/requester-common" "4.10.5"
"@astrojs/compiler@^0.1.12": "@astrojs/compiler@^0.1.13":
version "0.1.12" version "0.1.13"
resolved "https://registry.yarnpkg.com/@astrojs/compiler/-/compiler-0.1.12.tgz#e20fd240044505bea509e62c10f6e2a725e56e7a" resolved "https://registry.yarnpkg.com/@astrojs/compiler/-/compiler-0.1.13.tgz#06c810d71c7bcce1603ea77f9381940523544e69"
integrity sha512-oBPK6Rw9K+En1rSB8/15YXF7fC4QhJKwzGaQ8a7AFMga8hJqQwY8rReiwmatAe/6lYNUKJjeLOLO3nE2lGXhzQ== integrity sha512-t/soXPJ34AQ67goh8EInCNVWd2HYOpgL5hE2xcZGwG74cIuczT4c+Guiqt50KYF5a7eNTdolPdy/dd7yipW8nQ==
dependencies: dependencies:
typescript "^4.3.5" typescript "^4.3.5"