Автотесты с webpack-dev-сервером - PullRequest
0 голосов
/ 28 февраля 2019

Я совершенно запутался с темой.

Я разрабатываю какой-то ленивый модуль для сборки модулей, используя webpack-dev-server.Это наконец работает, но иногда нам нужно больше уверенности.Вот почему мне нужно несколько тестов.Задача состоит в том, чтобы сделать их своего рода автотестами.

Пока код запуска сервера выглядит следующим образом (я опускаю лишние параметры).

import webpack from "webpack";
import webpackConfig from "../webpack.config.js";
import webpackCompileConfig from "../webpack-compiler.config.mjs";
import WebpackDevServer from "webpack-dev-server";

webpack(webpackConfig(mode, dirname, masterPath)).run(function(err) {
  if (err) throw err;

  const compileOpt = {
    // pack of compiler options
  };
  const compiler = webpack(webpackCompileConfig(compileOpt));

  const server = new WebpackDevServer(compiler, {
    // pack of server options
  });

  server.listen(port, "0.0.0.0", err => {
    if (err) throw err;
    console.log(`Starting root server on 0.0.0.0:${port}`);
  });
});

Запускается и работает правильно: получает некоторые запросы к файлам, связывает необходимые модули с веб-пакетом и отправляет их запрашивающей стороне.
Простой тест, с которого я хочу начать, заключается в проверкеесть ли файлы после сборки или нет.

Предполагаемая логика:

  • Выполнить некоторую команду внутри этого проекта, например, npm run test
  • Запускает сервер и отправляет пакет запросов.с другой логикой, которую я хочу протестировать (параллельные, одновременные запросы и т. д.)
  • Он проверяет существование файла и отправляет мне результаты в консоли или в другом месте.такого рода

Проблема в том, что у меня очень мало опыта в любом виде тестирования, поэтому я буду признателен за вашу помощь.

===
То, как я сейчас его использую (спойлер: вручную)

Единственное, в чем мне помогает интернет.

  • Сервер запускается как обычно
  • Есть еще один полностью выключенныйтестовый модуль (код ниже)
  • Выполнить mocha
  • См. список результатов теста

test-server.js

var chai = require("chai");
var chaiHttp = require("chai-http");

const should = chai.should();
chai.use(chaiHttp);

describe("Test file existence", function() {
  it("units", done => {
    chai
      .request("http://localhost:9000")
      .get("/units/awesome-project/index.js")
      .end((err, res) => {
        res.should.have.status(200);
        done();
      });
  });
  // another 'it()'s to test other files
});

Да, работает.Но я хочу больше автоматизации.Просто

  • Запустите сервер
  • Отправьте запросы
  • Получите результаты теста

Я готов к диалогу.

1 Ответ

0 голосов
/ 04 марта 2019

Ну .. просто грустно, что никто не спрашивает.

В любом случае, я нашел ответ сам.И мне даже интересно, как это было чертовски легко.Кажется, все, что мне нужно, написано здесь: https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically

Таким образом, конечный результат похож на это:

import fs from "fs";
import path from "path";
import Mocha from "mocha";

const mocha = new Mocha();

const testDir = `${config.dirname}/test/tests`;
fs.readdirSync(testDir)
  .filter(file => file.match(/\.js$/))
  .forEach(file => {
    mocha.addFile(path.join(testDir, file));
  });
  
// somewhere before the devserver start
const runner = mocha.timeout(30000).run();
runner.on("end", () => {
  process.exit();
});

Я нашел его в тот день, когда опубликовал этот вопрос, но у кого-то еще была надежда ответить (сравнить решения).

С уважением,
Ник Ример

...