locals.test.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import * as assert from 'node:assert/strict';
  2. import { describe, it, before } from 'node:test';
  3. import nodejs from '../dist/index.js';
  4. import { loadFixture, createRequestAndResponse } from './test-utils.js';
  5. describe('API routes', () => {
  6. /** @type {import('./test-utils').Fixture} */
  7. let fixture;
  8. before(async () => {
  9. fixture = await loadFixture({
  10. root: './fixtures/locals/',
  11. output: 'server',
  12. adapter: nodejs({ mode: 'middleware' }),
  13. });
  14. await fixture.build();
  15. });
  16. it('Can use locals added by node middleware', async () => {
  17. const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
  18. let { req, res, text } = createRequestAndResponse({
  19. url: '/from-node-middleware',
  20. });
  21. let locals = { foo: 'bar' };
  22. handler(req, res, () => {}, locals);
  23. req.send();
  24. let html = await text();
  25. assert.equal(html.includes('<h1>bar</h1>'), true);
  26. });
  27. it('Throws an error when provided non-objects as locals', async () => {
  28. const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
  29. let { req, res, done } = createRequestAndResponse({
  30. url: '/from-node-middleware',
  31. });
  32. handler(req, res, undefined, 'locals');
  33. req.send();
  34. await done;
  35. assert.equal(res.statusCode, 500);
  36. });
  37. it('Can use locals added by astro middleware', async () => {
  38. const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
  39. const { req, res, text } = createRequestAndResponse({
  40. url: '/from-astro-middleware',
  41. });
  42. handler(req, res, () => {});
  43. req.send();
  44. const html = await text();
  45. assert.equal(html.includes('<h1>baz</h1>'), true);
  46. });
  47. it('Can access locals in API', async () => {
  48. const { handler } = await import('./fixtures/locals/dist/server/entry.mjs');
  49. let { req, res, done } = createRequestAndResponse({
  50. method: 'POST',
  51. url: '/api',
  52. });
  53. let locals = { foo: 'bar' };
  54. handler(req, res, () => {}, locals);
  55. req.send();
  56. let [buffer] = await done;
  57. let json = JSON.parse(buffer.toString('utf-8'));
  58. assert.equal(json.foo, 'bar');
  59. });
  60. });