mdx-slots.test.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import mdx from '@astrojs/mdx';
  2. import { describe, it, before, after } from 'node:test';
  3. import * as assert from 'node:assert/strict';
  4. import { parseHTML } from 'linkedom';
  5. import { loadFixture } from '../../../astro/test/test-utils.js';
  6. describe('MDX slots', () => {
  7. let fixture;
  8. before(async () => {
  9. fixture = await loadFixture({
  10. root: new URL('./fixtures/mdx-slots/', import.meta.url),
  11. integrations: [mdx()],
  12. });
  13. });
  14. describe('build', () => {
  15. before(async () => {
  16. await fixture.build();
  17. });
  18. it('supports top-level imports', async () => {
  19. const html = await fixture.readFile('/index.html');
  20. const { document } = parseHTML(html);
  21. const h1 = document.querySelector('h1');
  22. const defaultSlot = document.querySelector('[data-default-slot]');
  23. const namedSlot = document.querySelector('[data-named-slot]');
  24. assert.equal(h1.textContent, 'Hello slotted component!');
  25. assert.equal(defaultSlot.textContent, 'Default content.');
  26. assert.equal(namedSlot.textContent, 'Content for named slot.');
  27. });
  28. it('supports glob imports - <Component.default />', async () => {
  29. const html = await fixture.readFile('/glob/index.html');
  30. const { document } = parseHTML(html);
  31. const h1 = document.querySelector('[data-default-export] h1');
  32. const defaultSlot = document.querySelector('[data-default-export] [data-default-slot]');
  33. const namedSlot = document.querySelector('[data-default-export] [data-named-slot]');
  34. assert.equal(h1.textContent, 'Hello slotted component!');
  35. assert.equal(defaultSlot.textContent, 'Default content.');
  36. assert.equal(namedSlot.textContent, 'Content for named slot.');
  37. });
  38. it('supports glob imports - <Content />', async () => {
  39. const html = await fixture.readFile('/glob/index.html');
  40. const { document } = parseHTML(html);
  41. const h1 = document.querySelector('[data-content-export] h1');
  42. const defaultSlot = document.querySelector('[data-content-export] [data-default-slot]');
  43. const namedSlot = document.querySelector('[data-content-export] [data-named-slot]');
  44. assert.equal(h1.textContent, 'Hello slotted component!');
  45. assert.equal(defaultSlot.textContent, 'Default content.');
  46. assert.equal(namedSlot.textContent, 'Content for named slot.');
  47. });
  48. });
  49. describe('dev', () => {
  50. let devServer;
  51. before(async () => {
  52. devServer = await fixture.startDevServer();
  53. });
  54. after(async () => {
  55. await devServer.stop();
  56. });
  57. it('supports top-level imports', async () => {
  58. const res = await fixture.fetch('/');
  59. assert.equal(res.status, 200);
  60. const html = await res.text();
  61. const { document } = parseHTML(html);
  62. const h1 = document.querySelector('h1');
  63. const defaultSlot = document.querySelector('[data-default-slot]');
  64. const namedSlot = document.querySelector('[data-named-slot]');
  65. assert.equal(h1.textContent, 'Hello slotted component!');
  66. assert.equal(defaultSlot.textContent, 'Default content.');
  67. assert.equal(namedSlot.textContent, 'Content for named slot.');
  68. });
  69. it('supports glob imports - <Component.default />', async () => {
  70. const res = await fixture.fetch('/glob');
  71. assert.equal(res.status, 200);
  72. const html = await res.text();
  73. const { document } = parseHTML(html);
  74. const h1 = document.querySelector('[data-default-export] h1');
  75. const defaultSlot = document.querySelector('[data-default-export] [data-default-slot]');
  76. const namedSlot = document.querySelector('[data-default-export] [data-named-slot]');
  77. assert.equal(h1.textContent, 'Hello slotted component!');
  78. assert.equal(defaultSlot.textContent, 'Default content.');
  79. assert.equal(namedSlot.textContent, 'Content for named slot.');
  80. });
  81. it('supports glob imports - <Content />', async () => {
  82. const res = await fixture.fetch('/glob');
  83. assert.equal(res.status, 200);
  84. const html = await res.text();
  85. const { document } = parseHTML(html);
  86. const h1 = document.querySelector('[data-content-export] h1');
  87. const defaultSlot = document.querySelector('[data-content-export] [data-default-slot]');
  88. const namedSlot = document.querySelector('[data-content-export] [data-named-slot]');
  89. assert.equal(h1.textContent, 'Hello slotted component!');
  90. assert.equal(defaultSlot.textContent, 'Default content.');
  91. assert.equal(namedSlot.textContent, 'Content for named slot.');
  92. });
  93. });
  94. });