express.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. 'use strict';
  2. const test = require('tap').test;
  3. const ecstatic = require('../lib/ecstatic');
  4. const http = require('http');
  5. const express = require('express');
  6. const request = require('request');
  7. const mkdirp = require('mkdirp');
  8. const path = require('path');
  9. const eol = require('eol');
  10. const root = `${__dirname}/public`;
  11. const baseDir = 'base';
  12. mkdirp.sync(`${root}/emptyDir`);
  13. const cases = require('./fixtures/common-cases');
  14. test('express', (t) => {
  15. const filenames = Object.keys(cases);
  16. const port = Math.floor((Math.random() * ((1 << 16) - 1e4)) + 1e4);
  17. const app = express();
  18. app.use(ecstatic({
  19. root,
  20. gzip: true,
  21. baseDir,
  22. autoIndex: true,
  23. showDir: true,
  24. defaultExt: 'html',
  25. cache: 'no-cache',
  26. handleError: true,
  27. }));
  28. const server = http.createServer(app);
  29. server.listen(port, () => {
  30. let pending = filenames.length;
  31. filenames.forEach((file) => {
  32. const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`;
  33. const headers = cases[file].headers || {};
  34. request.get({
  35. uri,
  36. followRedirect: false,
  37. headers,
  38. }, (err, res, body) => {
  39. if (err) t.fail(err);
  40. const r = cases[file];
  41. t.equal(res.statusCode, r.code, `status code for \`${file}\``);
  42. if (r.code === 200) {
  43. t.equal(res.headers['cache-control'], 'no-cache', `cache control for \`${file}\``);
  44. }
  45. if (r.type !== undefined) {
  46. t.equal(
  47. res.headers['content-type'].split(';')[0], r.type,
  48. `content-type for \`${file}\``
  49. );
  50. }
  51. if (r.body !== undefined) {
  52. t.equal(eol.lf(body), r.body, `body for \`${file}\``);
  53. }
  54. pending -= 1;
  55. if (pending === 0) {
  56. server.close();
  57. t.end();
  58. }
  59. });
  60. });
  61. });
  62. });