mirror of
https://github.com/withastro/astro.git
synced 2025-01-27 22:19:04 -05:00
chore: Migrate some astro-*.test.js
to node:test
(#10078)
* chore: Migrate some astro-*.test.js to node:test * revert astro-dev-headers and astro-client-only * replace strictEqual with equal in astro-class-list --------- Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
This commit is contained in:
parent
f13d897002
commit
2168635a6f
12 changed files with 197 additions and 177 deletions
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
|
@ -22,7 +23,7 @@ describe('Asset URL resolution in build', () => {
|
|||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const href = $('link[rel=stylesheet]').attr('href');
|
||||
expect(href.startsWith('/sub/path/')).to.equal(false);
|
||||
assert.equal(href.startsWith('/sub/path/'), false);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -42,14 +43,14 @@ describe('Asset URL resolution in build', () => {
|
|||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const href = $('link[rel=stylesheet]').attr('href');
|
||||
expect(href.startsWith('/sub/path/')).to.equal(false);
|
||||
assert.equal(href.startsWith('/sub/path/'), false);
|
||||
});
|
||||
|
||||
it('does include the base subpath', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const href = $('link[rel=stylesheet]').attr('href');
|
||||
expect(href.startsWith('/another/base/')).to.equal(true);
|
||||
assert.equal(href.startsWith('/another/base/'), true);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import testAdapter from './test-adapter.js';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
@ -22,7 +23,7 @@ describe('Assets Prefix - Static', () => {
|
|||
const $ = cheerio.load(html);
|
||||
const stylesheets = $('link[rel="stylesheet"]');
|
||||
stylesheets.each((i, el) => {
|
||||
expect(el.attribs.href).to.match(assetsPrefixRegex);
|
||||
assert.match(el.attribs.href, assetsPrefixRegex);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -30,22 +31,22 @@ describe('Assets Prefix - Static', () => {
|
|||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const imgAsset = $('#image-asset');
|
||||
expect(imgAsset.attr('src')).to.match(assetsPrefixRegex);
|
||||
assert.match(imgAsset.attr('src'), assetsPrefixRegex);
|
||||
});
|
||||
|
||||
it('react component astro-island should import from assetsPrefix', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const island = $('astro-island');
|
||||
expect(island.attr('component-url')).to.match(assetsPrefixRegex);
|
||||
expect(island.attr('renderer-url')).to.match(assetsPrefixRegex);
|
||||
assert.match(island.attr('component-url'), assetsPrefixRegex);
|
||||
assert.match(island.attr('renderer-url'), assetsPrefixRegex);
|
||||
});
|
||||
|
||||
it('import.meta.env.ASSETS_PREFIX works', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const env = $('#assets-prefix-env');
|
||||
expect(env.text()).to.equal(assetsPrefix);
|
||||
assert.equal(env.text(), assetsPrefix);
|
||||
});
|
||||
|
||||
it('markdown image src start with assetsPrefix', async () => {
|
||||
|
@ -53,7 +54,7 @@ describe('Assets Prefix - Static', () => {
|
|||
const $ = cheerio.load(html);
|
||||
const imgAssets = $('img');
|
||||
imgAssets.each((i, el) => {
|
||||
expect(el.attribs.src).to.match(assetsPrefixRegex);
|
||||
assert.match(el.attribs.src, assetsPrefixRegex);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -61,7 +62,7 @@ describe('Assets Prefix - Static', () => {
|
|||
const html = await fixture.readFile('/blog/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
const imgAsset = $('img');
|
||||
expect(imgAsset.attr('src')).to.match(assetsPrefixRegex);
|
||||
assert.match(imgAsset.attr('src'), assetsPrefixRegex);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -83,7 +84,7 @@ describe('Assets Prefix - with path prefix', () => {
|
|||
const $ = cheerio.load(html);
|
||||
const stylesheets = $('link[rel="stylesheet"]');
|
||||
stylesheets.each((i, el) => {
|
||||
expect(el.attribs.href).to.match(/^\/starting-slash\/.*/);
|
||||
assert.match(el.attribs.href, /^\/starting-slash\/.*/);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -104,44 +105,44 @@ describe('Assets Prefix, server', () => {
|
|||
it('all stylesheets should start with assetPrefix', async () => {
|
||||
const request = new Request('http://example.com/custom-base/');
|
||||
const response = await app.render(request);
|
||||
expect(response.status).to.equal(200);
|
||||
assert.equal(response.status, 200);
|
||||
const html = await response.text();
|
||||
const $ = cheerio.load(html);
|
||||
const stylesheets = $('link[rel="stylesheet"]');
|
||||
stylesheets.each((i, el) => {
|
||||
expect(el.attribs.href).to.match(assetsPrefixRegex);
|
||||
assert.match(el.attribs.href, assetsPrefixRegex);
|
||||
});
|
||||
});
|
||||
|
||||
it('image src start with assetsPrefix', async () => {
|
||||
const request = new Request('http://example.com/custom-base/');
|
||||
const response = await app.render(request);
|
||||
expect(response.status).to.equal(200);
|
||||
assert.equal(response.status, 200);
|
||||
const html = await response.text();
|
||||
const $ = cheerio.load(html);
|
||||
const imgAsset = $('#image-asset');
|
||||
expect(imgAsset.attr('src')).to.match(assetsPrefixRegex);
|
||||
assert.match(imgAsset.attr('src'), assetsPrefixRegex);
|
||||
});
|
||||
|
||||
it('react component astro-island should import from assetsPrefix', async () => {
|
||||
const request = new Request('http://example.com/custom-base/');
|
||||
const response = await app.render(request);
|
||||
expect(response.status).to.equal(200);
|
||||
assert.equal(response.status, 200);
|
||||
const html = await response.text();
|
||||
const $ = cheerio.load(html);
|
||||
const island = $('astro-island');
|
||||
expect(island.attr('component-url')).to.match(assetsPrefixRegex);
|
||||
expect(island.attr('renderer-url')).to.match(assetsPrefixRegex);
|
||||
assert.match(island.attr('component-url'), assetsPrefixRegex);
|
||||
assert.match(island.attr('renderer-url'), assetsPrefixRegex);
|
||||
});
|
||||
|
||||
it('markdown optimized image src does not start with assetsPrefix in SSR', async () => {
|
||||
const request = new Request('http://example.com/custom-base/markdown/');
|
||||
const response = await app.render(request);
|
||||
expect(response.status).to.equal(200);
|
||||
assert.equal(response.status, 200);
|
||||
const html = await response.text();
|
||||
const $ = cheerio.load(html);
|
||||
const imgAsset = $('img');
|
||||
expect(imgAsset.attr('src')).to.not.match(assetsPrefixRegex);
|
||||
assert.doesNotMatch(imgAsset.attr('src'), assetsPrefixRegex);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -164,12 +165,12 @@ describe('Assets Prefix, with path prefix', () => {
|
|||
it('all stylesheets should start with assetPrefix', async () => {
|
||||
const request = new Request('http://example.com/custom-base/');
|
||||
const response = await app.render(request);
|
||||
expect(response.status).to.equal(200);
|
||||
assert.equal(response.status, 200);
|
||||
const html = await response.text();
|
||||
const $ = cheerio.load(html);
|
||||
const stylesheets = $('link[rel="stylesheet"]');
|
||||
stylesheets.each((i, el) => {
|
||||
expect(el.attribs.href).to.match(/^\/starting-slash\/.*/);
|
||||
assert.match(el.attribs.href, /^\/starting-slash\/.*/);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
import srcsetParse from 'srcset-parse';
|
||||
|
@ -22,7 +23,7 @@ describe('Assets', () => {
|
|||
const $ = cheerio.load(html);
|
||||
const imgPath = $('img').attr('src');
|
||||
const data = await fixture.readFile(imgPath);
|
||||
expect(!!data).to.equal(true);
|
||||
assert.equal(!!data, true);
|
||||
});
|
||||
|
||||
it('built the 2x image', async () => {
|
||||
|
@ -32,7 +33,7 @@ describe('Assets', () => {
|
|||
const candidates = matchSrcset(srcset);
|
||||
const match = candidates.find((a) => a.density === 2);
|
||||
const data = await fixture.readFile(match.url);
|
||||
expect(!!data).to.equal(true);
|
||||
assert.equal(!!data, true);
|
||||
});
|
||||
|
||||
it('built the 3x image', async () => {
|
||||
|
@ -42,7 +43,7 @@ describe('Assets', () => {
|
|||
const candidates = matchSrcset(srcset);
|
||||
const match = candidates.find((a) => a.density === 3);
|
||||
const data = await fixture.readFile(match.url);
|
||||
expect(!!data).to.equal(true);
|
||||
assert.equal(!!data, true);
|
||||
});
|
||||
|
||||
it('built image from an import specifier', async () => {
|
||||
|
@ -50,7 +51,7 @@ describe('Assets', () => {
|
|||
const $ = cheerio.load(html);
|
||||
const src = $('#import-no-url').attr('src');
|
||||
const data = await fixture.readFile(src);
|
||||
expect(!!data).to.equal(true);
|
||||
assert.equal(!!data, true);
|
||||
});
|
||||
|
||||
it('built image from an import specifier using ?url', async () => {
|
||||
|
@ -58,6 +59,6 @@ describe('Assets', () => {
|
|||
const $ = cheerio.load(html);
|
||||
const src = $('#import-url').attr('src');
|
||||
const data = await fixture.readFile(src);
|
||||
expect(!!data).to.equal(true);
|
||||
assert.equal(!!data, true);
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
|
@ -33,7 +34,7 @@ describe('Attributes', async () => {
|
|||
for (const id of Object.keys(attrs)) {
|
||||
const { attribute, value } = attrs[id];
|
||||
const attr = $(`#${id}`).attr(attribute);
|
||||
expect(attr).to.equal(value);
|
||||
assert.equal(attr, value);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -41,24 +42,24 @@ describe('Attributes', async () => {
|
|||
const html = await fixture.readFile('/component/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('#true').attr('attr')).to.equal('attr-true');
|
||||
expect($('#true').attr('type')).to.equal('boolean');
|
||||
expect($('#false').attr('attr')).to.equal('attr-false');
|
||||
expect($('#false').attr('type')).to.equal('boolean');
|
||||
assert.equal($('#true').attr('attr'), 'attr-true');
|
||||
assert.equal($('#true').attr('type'), 'boolean');
|
||||
assert.equal($('#false').attr('attr'), 'attr-false');
|
||||
assert.equal($('#false').attr('type'), 'boolean');
|
||||
});
|
||||
|
||||
it('Passes namespaced attributes as expected', async () => {
|
||||
const html = await fixture.readFile('/namespaced/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('div').attr('xmlns:happy')).to.equal('https://example.com/schemas/happy');
|
||||
expect($('img').attr('happy:smile')).to.equal('sweet');
|
||||
assert.equal($('div').attr('xmlns:happy'), 'https://example.com/schemas/happy');
|
||||
assert.equal($('img').attr('happy:smile'), 'sweet');
|
||||
});
|
||||
|
||||
it('Passes namespaced attributes to components as expected', async () => {
|
||||
const html = await fixture.readFile('/namespaced-component/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('span').attr('on:click')).to.deep.equal('(event) => console.log(event)');
|
||||
assert.deepEqual($('span').attr('on:click'), '(event) => console.log(event)');
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { after, describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
|
@ -25,70 +26,70 @@ describe('Astro basic build', () => {
|
|||
const html = await fixture.readFile(`/index.html`);
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('h1').text()).to.equal('Hello world!');
|
||||
assert.equal($('h1').text(), 'Hello world!');
|
||||
});
|
||||
|
||||
it('Correctly serializes boolean attributes', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('h1').attr('data-something')).to.equal('');
|
||||
expect($('h2').attr('not-data-ok')).to.equal('');
|
||||
assert.equal($('h1').attr('data-something'), '');
|
||||
assert.equal($('h2').attr('not-data-ok'), '');
|
||||
});
|
||||
|
||||
it('Selector with an empty body', async () => {
|
||||
const html = await fixture.readFile('/empty-class/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('.author')).to.have.lengthOf(1);
|
||||
assert.equal($('.author').length, 1);
|
||||
});
|
||||
|
||||
it('Allows forward-slashes in mustache tags (#407)', async () => {
|
||||
const html = await fixture.readFile('/forward-slash/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('a[href="/post/one"]')).to.have.lengthOf(1);
|
||||
expect($('a[href="/post/two"]')).to.have.lengthOf(1);
|
||||
expect($('a[href="/post/three"]')).to.have.lengthOf(1);
|
||||
assert.equal($('a[href="/post/one"]').length, 1);
|
||||
assert.equal($('a[href="/post/two"]').length, 1);
|
||||
assert.equal($('a[href="/post/three"]').length, 1);
|
||||
});
|
||||
|
||||
it('Allows spread attributes (#521)', async () => {
|
||||
const html = await fixture.readFile('/spread/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('#spread-leading')).to.have.lengthOf(1);
|
||||
expect($('#spread-leading').attr('a')).to.equal('0');
|
||||
expect($('#spread-leading').attr('b')).to.equal('1');
|
||||
expect($('#spread-leading').attr('c')).to.equal('2');
|
||||
assert.equal($('#spread-leading').length, 1);
|
||||
assert.equal($('#spread-leading').attr('a'), '0');
|
||||
assert.equal($('#spread-leading').attr('b'), '1');
|
||||
assert.equal($('#spread-leading').attr('c'), '2');
|
||||
|
||||
expect($('#spread-trailing')).to.have.lengthOf(1);
|
||||
expect($('#spread-trailing').attr('a')).to.equal('0');
|
||||
expect($('#spread-trailing').attr('b')).to.equal('1');
|
||||
expect($('#spread-trailing').attr('c')).to.equal('2');
|
||||
assert.equal($('#spread-trailing').length, 1);
|
||||
assert.equal($('#spread-trailing').attr('a'), '0');
|
||||
assert.equal($('#spread-trailing').attr('b'), '1');
|
||||
assert.equal($('#spread-trailing').attr('c'), '2');
|
||||
});
|
||||
|
||||
it('Allows spread attributes with TypeScript (#521)', async () => {
|
||||
const html = await fixture.readFile('/spread/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('#spread-ts')).to.have.lengthOf(1);
|
||||
expect($('#spread-ts').attr('a')).to.equal('0');
|
||||
expect($('#spread-ts').attr('b')).to.equal('1');
|
||||
expect($('#spread-ts').attr('c')).to.equal('2');
|
||||
assert.equal($('#spread-ts').length, 1);
|
||||
assert.equal($('#spread-ts').attr('a'), '0');
|
||||
assert.equal($('#spread-ts').attr('b'), '1');
|
||||
assert.equal($('#spread-ts').attr('c'), '2');
|
||||
});
|
||||
|
||||
it('Allows scoped classes with spread', async () => {
|
||||
const html = await fixture.readFile('/spread-scope/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('#spread-plain')).to.have.lengthOf(1);
|
||||
expect($('#spread-plain').attr('class')).to.match(/astro-.*/);
|
||||
assert.equal($('#spread-plain').length, 1);
|
||||
assert.match($('#spread-plain').attr('class'), /astro-.*/);
|
||||
|
||||
expect($('#spread-class')).to.have.lengthOf(1);
|
||||
expect($('#spread-class').attr('class')).to.match(/astro-.*/);
|
||||
assert.equal($('#spread-class').length, 1);
|
||||
assert.match($('#spread-class').attr('class'), /astro-.*/);
|
||||
|
||||
expect($('#spread-class-list')).to.have.lengthOf(1);
|
||||
expect($('#spread-class-list').attr('class')).to.match(/astro-.*/);
|
||||
assert.equal($('#spread-class-list').length, 1);
|
||||
assert.match($('#spread-class-list').attr('class'), /astro-.*/);
|
||||
});
|
||||
|
||||
it('Allows using the Fragment element to be used', async () => {
|
||||
|
@ -96,30 +97,30 @@ describe('Astro basic build', () => {
|
|||
const $ = cheerio.load(html);
|
||||
|
||||
// will be 1 if element rendered correctly
|
||||
expect($('#one')).to.have.lengthOf(1);
|
||||
assert.strictEqual($('#one').length, 1);
|
||||
});
|
||||
|
||||
it('supports special chars in filename', async () => {
|
||||
// will have already erred by now, but add test anyway
|
||||
expect(await fixture.readFile('/special-“characters” -in-file/index.html')).to.be.ok;
|
||||
assert.ok(await fixture.readFile('/special-“characters” -in-file/index.html'));
|
||||
});
|
||||
|
||||
it('renders the components top-down', async () => {
|
||||
const html = await fixture.readFile('/order/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
expect($('#rendered-order').text()).to.eq('Rendered order: A, B');
|
||||
assert.strictEqual($('#rendered-order').text(), 'Rendered order: A, B');
|
||||
});
|
||||
|
||||
it('renders markdown in utf-8 by default', async () => {
|
||||
const html = await fixture.readFile('/chinese-encoding-md/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
expect($('h1').text()).to.equal('我的第一篇博客文章');
|
||||
assert.strictEqual($('h1').text(), '我的第一篇博客文章');
|
||||
});
|
||||
|
||||
it('renders MDX in utf-8 by default', async () => {
|
||||
const html = await fixture.readFile('/chinese-encoding-mdx/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
expect($('h1').text()).to.equal('我的第一篇博客文章');
|
||||
assert.strictEqual($('h1').text(), '我的第一篇博客文章');
|
||||
});
|
||||
|
||||
it('Supports void elements whose name is a string (#2062)', async () => {
|
||||
|
@ -127,45 +128,49 @@ describe('Astro basic build', () => {
|
|||
const $ = cheerio.load(html);
|
||||
|
||||
// <Input />
|
||||
expect($('body > :nth-child(1)').prop('outerHTML')).to.equal('<input>');
|
||||
assert.strictEqual($('body > :nth-child(1)').prop('outerHTML'), '<input>');
|
||||
|
||||
// <Input type="password" />
|
||||
expect($('body > :nth-child(2)').prop('outerHTML')).to.equal('<input type="password">');
|
||||
assert.strictEqual($('body > :nth-child(2)').prop('outerHTML'), '<input type="password">');
|
||||
|
||||
// <Input type="text" />
|
||||
expect($('body > :nth-child(3)').prop('outerHTML')).to.equal('<input type="text">');
|
||||
assert.strictEqual($('body > :nth-child(3)').prop('outerHTML'), '<input type="text">');
|
||||
|
||||
// <Input type="select"><option>option</option></Input>
|
||||
expect($('body > :nth-child(4)').prop('outerHTML')).to.equal(
|
||||
assert.strictEqual(
|
||||
$('body > :nth-child(4)').prop('outerHTML'),
|
||||
'<select><option>option</option></select>'
|
||||
);
|
||||
|
||||
// <Input type="textarea">textarea</Input>
|
||||
expect($('body > :nth-child(5)').prop('outerHTML')).to.equal('<textarea>textarea</textarea>');
|
||||
assert.strictEqual(
|
||||
$('body > :nth-child(5)').prop('outerHTML'),
|
||||
'<textarea>textarea</textarea>'
|
||||
);
|
||||
});
|
||||
|
||||
it('Generates pages that end with .mjs', async () => {
|
||||
const content1 = await fixture.readFile('/get-static-paths-with-mjs/example.mjs');
|
||||
expect(content1).to.be.ok;
|
||||
assert.ok(content1);
|
||||
const content2 = await fixture.readFile('/get-static-paths-with-mjs/example.js');
|
||||
expect(content2).to.be.ok;
|
||||
assert.ok(content2);
|
||||
});
|
||||
|
||||
it('allows file:// urls as module specifiers', async () => {
|
||||
const html = await fixture.readFile('/fileurl/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
expect($('h1').text()).to.equal('WORKS');
|
||||
assert.strictEqual($('h1').text(), 'WORKS');
|
||||
});
|
||||
|
||||
describe('preview', () => {
|
||||
it('returns 200 for valid URLs', async () => {
|
||||
const result = await fixture.fetch('/');
|
||||
expect(result.status).to.equal(200);
|
||||
assert.strictEqual(result.status, 200);
|
||||
});
|
||||
|
||||
it('returns 404 for invalid URLs', async () => {
|
||||
const result = await fixture.fetch('/bad-url');
|
||||
expect(result.status).to.equal(404);
|
||||
assert.strictEqual(result.status, 404);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -188,25 +193,25 @@ describe('Astro basic development', () => {
|
|||
|
||||
it('Renders markdown in utf-8 by default', async () => {
|
||||
const res = await fixture.fetch('/chinese-encoding-md');
|
||||
expect(res.status).to.equal(200);
|
||||
assert.strictEqual(res.status, 200);
|
||||
const html = await res.text();
|
||||
const $ = cheerio.load(html);
|
||||
expect($('h1').text()).to.equal('我的第一篇博客文章');
|
||||
assert.equal($('h1').text(), '我的第一篇博客文章');
|
||||
const isUtf8 =
|
||||
res.headers.get('content-type').includes('charset=utf-8') ||
|
||||
html.includes('<meta charset="utf-8">');
|
||||
expect(isUtf8).to.be.true;
|
||||
assert.ok(isUtf8);
|
||||
});
|
||||
|
||||
it('Renders MDX in utf-8 by default', async () => {
|
||||
const res = await fixture.fetch('/chinese-encoding-mdx');
|
||||
expect(res.status).to.equal(200);
|
||||
assert.strictEqual(res.status, 200);
|
||||
const html = await res.text();
|
||||
const $ = cheerio.load(html);
|
||||
expect($('h1').text()).to.equal('我的第一篇博客文章');
|
||||
assert.equal($('h1').text(), '我的第一篇博客文章');
|
||||
const isUtf8 =
|
||||
res.headers.get('content-type').includes('charset=utf-8') ||
|
||||
html.includes('<meta charset="utf-8">');
|
||||
expect(isUtf8).to.be.true;
|
||||
assert.ok(isUtf8);
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
|
@ -16,15 +17,15 @@ describe('Component children', () => {
|
|||
|
||||
// test 1: Can pass text to Preact components
|
||||
const $preact = $('#preact');
|
||||
expect($preact.text().trim()).to.equal('Hello world');
|
||||
assert.strictEqual($preact.text().trim(), 'Hello world');
|
||||
|
||||
// test 2: Can pass text to Vue components
|
||||
const $vue = $('#vue');
|
||||
expect($vue.text().trim()).to.equal('Hello world');
|
||||
assert.strictEqual($vue.text().trim(), 'Hello world');
|
||||
|
||||
// test 3: Can pass text to Svelte components
|
||||
const $svelte = $('#svelte');
|
||||
expect($svelte.text().trim()).to.equal('Hello world');
|
||||
assert.strictEqual($svelte.text().trim(), 'Hello world');
|
||||
});
|
||||
|
||||
it('Passes markup children to framework components', async () => {
|
||||
|
@ -33,15 +34,15 @@ describe('Component children', () => {
|
|||
|
||||
// test 1: Can pass markup to Preact components
|
||||
const $preact = $('#preact h1');
|
||||
expect($preact.text().trim()).to.equal('Hello world');
|
||||
assert.strictEqual($preact.text().trim(), 'Hello world');
|
||||
|
||||
// test 2: Can pass markup to Vue components
|
||||
const $vue = $('#vue h1');
|
||||
expect($vue.text().trim()).to.equal('Hello world');
|
||||
assert.strictEqual($vue.text().trim(), 'Hello world');
|
||||
|
||||
// test 3: Can pass markup to Svelte components
|
||||
const $svelte = $('#svelte h1');
|
||||
expect($svelte.text().trim()).to.equal('Hello world');
|
||||
assert.strictEqual($svelte.text().trim(), 'Hello world');
|
||||
});
|
||||
|
||||
it('Passes multiple children to framework components', async () => {
|
||||
|
@ -50,21 +51,21 @@ describe('Component children', () => {
|
|||
|
||||
// test 1: Can pass multiple children to Preact components
|
||||
const $preact = $('#preact');
|
||||
expect($preact.children()).to.have.lengthOf(2);
|
||||
expect($preact.children(':first-child').text().trim()).to.equal('Hello world');
|
||||
expect($preact.children(':last-child').text().trim()).to.equal('Goodbye world');
|
||||
assert.strictEqual($preact.children().length, 2);
|
||||
assert.strictEqual($preact.children(':first-child').text().trim(), 'Hello world');
|
||||
assert.strictEqual($preact.children(':last-child').text().trim(), 'Goodbye world');
|
||||
|
||||
// test 2: Can pass multiple children to Vue components
|
||||
const $vue = $('#vue');
|
||||
expect($vue.children()).to.have.lengthOf(2);
|
||||
expect($vue.children(':first-child').text().trim()).to.equal('Hello world');
|
||||
expect($vue.children(':last-child').text().trim()).to.equal('Goodbye world');
|
||||
assert.strictEqual($vue.children().length, 2);
|
||||
assert.strictEqual($vue.children(':first-child').text().trim(), 'Hello world');
|
||||
assert.strictEqual($vue.children(':last-child').text().trim(), 'Goodbye world');
|
||||
|
||||
// test 3: Can pass multiple children to Svelte components
|
||||
const $svelte = $('#svelte');
|
||||
expect($svelte.children()).to.have.lengthOf(2);
|
||||
expect($svelte.children(':first-child').text().trim()).to.equal('Hello world');
|
||||
expect($svelte.children(':last-child').text().trim()).to.equal('Goodbye world');
|
||||
assert.strictEqual($svelte.children().length, 2);
|
||||
assert.strictEqual($svelte.children(':first-child').text().trim(), 'Hello world');
|
||||
assert.strictEqual($svelte.children(':last-child').text().trim(), 'Goodbye world');
|
||||
});
|
||||
|
||||
it('Renders a template when children are not rendered for client components', async () => {
|
||||
|
@ -72,24 +73,26 @@ describe('Component children', () => {
|
|||
const $ = cheerio.load(html);
|
||||
|
||||
// test 1: If SSR only, no children are rendered.
|
||||
expect($('#ssr-only').children()).to.have.lengthOf(0);
|
||||
assert.strictEqual($('#ssr-only').children().length, 0);
|
||||
|
||||
// test 2: If client, and no children are rendered, a template is.
|
||||
expect($('#client').parent().children()).to.have.lengthOf(
|
||||
assert.strictEqual(
|
||||
$('#client').parent().children().length,
|
||||
2,
|
||||
'rendered the client component and a template'
|
||||
);
|
||||
expect($('#client').parent().find('template[data-astro-template]')).to.have.lengthOf(
|
||||
assert.strictEqual(
|
||||
$('#client').parent().find('template[data-astro-template]').length,
|
||||
1,
|
||||
'Found 1 template'
|
||||
);
|
||||
|
||||
// test 3: If client, and children are rendered, no template is.
|
||||
expect($('#client-render').parent().children()).to.have.lengthOf(1);
|
||||
expect($('#client-render').parent().find('template')).to.have.lengthOf(0);
|
||||
assert.strictEqual($('#client-render').parent().children().length, 1);
|
||||
assert.strictEqual($('#client-render').parent().find('template').length, 0);
|
||||
|
||||
// test 4: If client and no children are provided, no template is.
|
||||
expect($('#client-no-children').parent().children()).to.have.lengthOf(1);
|
||||
expect($('#client-no-children').parent().find('template')).to.have.lengthOf(0);
|
||||
assert.strictEqual($('#client-no-children').parent().children().length, 1);
|
||||
assert.strictEqual($('#client-no-children').parent().find('template').length, 0);
|
||||
});
|
||||
});
|
63
packages/astro/test/astro-class-list.nodetest.js
Normal file
63
packages/astro/test/astro-class-list.nodetest.js
Normal file
|
@ -0,0 +1,63 @@
|
|||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
describe('Class List', async () => {
|
||||
let fixture;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture({ root: './fixtures/astro-class-list/' });
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('Passes class:list attributes as expected to elements', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
assert.equal($('[class="test control"]').length, 1, '[class="test control"]');
|
||||
assert.equal($('[class="test expression"]').length, 1, '[class="test expression"]');
|
||||
assert.equal($('[class="test true"]').length, 1, '[class="test true"]');
|
||||
assert.equal($('[class="test truthy"]').length, 1, '[class="test truthy"]');
|
||||
assert.equal($('[class="test set"]').length, 1, '[class="test set"]');
|
||||
assert.equal(
|
||||
$('[class="hello goodbye hello world hello friend"]').length,
|
||||
1,
|
||||
'[class="hello goodbye hello world hello friend"]'
|
||||
);
|
||||
assert.equal($('[class="foo baz"]').length, 1, '[class="foo baz"]');
|
||||
assert.equal($('span:not([class])').length, 1, 'span:not([class])');
|
||||
|
||||
assert.equal($('.false, .noshow1, .noshow2, .noshow3, .noshow4').length, 0);
|
||||
});
|
||||
|
||||
it('Passes class:list attributes as expected to components', async () => {
|
||||
const html = await fixture.readFile('/component/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
assert.equal($('[class="test control"]').length, 1, '[class="test control"]');
|
||||
assert.equal($('[class="test expression"]').length, 1, '[class="test expression"]');
|
||||
assert.equal($('[class="test true"]').length, 1, '[class="test true"]');
|
||||
assert.equal($('[class="test truthy"]').length, 1, '[class="test truthy"]');
|
||||
assert.equal($('[class="test set"]').length, 1, '[class="test set"]');
|
||||
assert.equal(
|
||||
$('[class="hello goodbye hello world hello friend"]').length,
|
||||
1,
|
||||
'[class="hello goodbye hello world hello friend"]'
|
||||
);
|
||||
assert.equal($('[class="foo baz"]').length, 1, '[class="foo baz"]');
|
||||
assert.equal($('span:not([class])').length, 1, 'span:not([class])');
|
||||
|
||||
assert.equal($('[class="test control"]').text(), 'test control');
|
||||
assert.equal($('[class="test expression"]').text(), 'test expression');
|
||||
assert.equal($('[class="test true"]').text(), 'test true');
|
||||
assert.equal($('[class="test truthy"]').text(), 'test truthy');
|
||||
assert.equal($('[class="test set"]').text(), 'test set');
|
||||
assert.equal(
|
||||
$('[class="hello goodbye hello world hello friend"]').text(),
|
||||
'hello goodbye hello world hello friend'
|
||||
);
|
||||
assert.equal($('[class="foo baz"]').text(), 'foo baz');
|
||||
assert.equal($('span:not([class])').text(), '');
|
||||
});
|
||||
});
|
|
@ -1,59 +0,0 @@
|
|||
import { expect } from 'chai';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
describe('Class List', async () => {
|
||||
let fixture;
|
||||
|
||||
before(async () => {
|
||||
fixture = await loadFixture({ root: './fixtures/astro-class-list/' });
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('Passes class:list attributes as expected to elements', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('[class="test control"]')).to.have.lengthOf(1, '[class="test control"]');
|
||||
expect($('[class="test expression"]')).to.have.lengthOf(1, '[class="test expression"]');
|
||||
expect($('[class="test true"]')).to.have.lengthOf(1, '[class="test true"]');
|
||||
expect($('[class="test truthy"]')).to.have.lengthOf(1, '[class="test truthy"]');
|
||||
expect($('[class="test set"]')).to.have.lengthOf(1, '[class="test set"]');
|
||||
expect($('[class="hello goodbye hello world hello friend"]')).to.have.lengthOf(
|
||||
1,
|
||||
'[class="hello goodbye hello world hello friend"]'
|
||||
);
|
||||
expect($('[class="foo baz"]')).to.have.lengthOf(1, '[class="foo baz"]');
|
||||
expect($('span:not([class])')).to.have.lengthOf(1, 'span:not([class])');
|
||||
|
||||
expect($('.false, .noshow1, .noshow2, .noshow3, .noshow4')).to.have.lengthOf(0);
|
||||
});
|
||||
|
||||
it('Passes class:list attributes as expected to components', async () => {
|
||||
const html = await fixture.readFile('/component/index.html');
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('[class="test control"]')).to.have.lengthOf(1, '[class="test control"]');
|
||||
expect($('[class="test expression"]')).to.have.lengthOf(1, '[class="test expression"]');
|
||||
expect($('[class="test true"]')).to.have.lengthOf(1, '[class="test true"]');
|
||||
expect($('[class="test truthy"]')).to.have.lengthOf(1, '[class="test truthy"]');
|
||||
expect($('[class="test set"]')).to.have.lengthOf(1, '[class="test set"]');
|
||||
expect($('[class="hello goodbye hello world hello friend"]')).to.have.lengthOf(
|
||||
1,
|
||||
'[class="hello goodbye hello world hello friend"]'
|
||||
);
|
||||
expect($('[class="foo baz"]')).to.have.lengthOf(1, '[class="foo baz"]');
|
||||
expect($('span:not([class])')).to.have.lengthOf(1, 'span:not([class])');
|
||||
|
||||
expect($('[class="test control"]').text()).to.equal('test control');
|
||||
expect($('[class="test expression"]').text()).to.equal('test expression');
|
||||
expect($('[class="test true"]').text()).to.equal('test true');
|
||||
expect($('[class="test truthy"]').text()).to.equal('test truthy');
|
||||
expect($('[class="test set"]').text()).to.equal('test set');
|
||||
expect($('[class="hello goodbye hello world hello friend"]').text()).to.equal(
|
||||
'hello goodbye hello world hello friend'
|
||||
);
|
||||
expect($('[class="foo baz"]').text()).to.equal('foo baz');
|
||||
expect($('span:not([class])').text()).to.equal('');
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
describe('Component bundling', () => {
|
||||
|
@ -15,6 +16,6 @@ describe('Component bundling', () => {
|
|||
chunk.startsWith('ManyComponents')
|
||||
);
|
||||
const manyComponentsChunkContent = await fixture.readFile(`/_astro/${manyComponentsChunkName}`);
|
||||
expect(manyComponentsChunkContent).to.not.include('FooComponent');
|
||||
assert.equal(manyComponentsChunkContent.includes('FooComponent'), false);
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
describe('External file references', () => {
|
||||
|
@ -11,7 +12,7 @@ describe('External file references', () => {
|
|||
|
||||
it('Build with externeal reference', async () => {
|
||||
const html = await fixture.readFile('/index.html');
|
||||
expect(html).to.include('<script src="/external-file.js"');
|
||||
assert.equal(html.includes('<script src="/external-file.js"'), true);
|
||||
});
|
||||
});
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
|
@ -17,7 +18,7 @@ describe('Astro generator', () => {
|
|||
const html = await fixture.readFile(`/index.html`);
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
expect($('meta[name="generator"]').attr('content')).to.match(/^Astro v/);
|
||||
assert.match($('meta[name="generator"]').attr('content'), /^Astro v/);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,4 +1,5 @@
|
|||
import { expect } from 'chai';
|
||||
import assert from 'node:assert/strict';
|
||||
import { describe, before, it } from 'node:test';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { loadFixture } from './test-utils.js';
|
||||
|
||||
|
@ -19,7 +20,7 @@ describe('Head in its own component', () => {
|
|||
it('Styles are appended to the head and not the body', async () => {
|
||||
let html = await fixture.readFile('/head-own-component/index.html');
|
||||
let $ = cheerio.load(html);
|
||||
expect($('link[rel=stylesheet]')).to.have.a.lengthOf(1, 'one stylesheet overall');
|
||||
expect($('head link[rel=stylesheet]')).to.have.a.lengthOf(1, 'stylesheet is in the head');
|
||||
assert.equal($('link[rel=stylesheet]').length, 1, 'one stylesheet overall');
|
||||
assert.equal($('head link[rel=stylesheet]').length, 1, 'stylesheet is in the head');
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue