Squeak.ru - шаблоны программирования

Как запустить скрипт перед всеми тестами jsamine?

Я хочу запустить сервер и запустить тесты его API с помощью Jasmine.

Для этого я хочу убедиться, что сервер настроен и работает, прежде чем жасмин запустит свои тесты.

Также у меня много тестов, и я разбил их на несколько файлов.

Я не хочу специально запускать сервер в хуке beforeAll каждого тестового файла, так как это приводит к конфликтам на порту, на котором работает сервер.

Я подумал о двух теоретических решениях, которые я не знаю, как сделать с Жасмин.

  1. Иметь глобальный сценарий до/после команды jasmine, которая выполняется до/после всех тестовых файлов.
  2. Чтобы иметь возможность импортировать все тестовые файлы в файл Jasmine, где я могу выполнить настройку в beforeAll, как мы все это знаем. Однако я не знаю, как правильно импортировать эти файлы, и это также делает их зависимыми от моего файла mainTest. Это означает, что я не могу выполнять их по отдельности.

Дополнительная информация: я в среде node.js запускаю экспресс-сервер и тестирую его API (каждый маршрут получает свой тестовый файл)


Ответы:


1

Вы можете использовать конфигурацию helpers. Файлы в каталоге helpers будут выполнены перед запуском всех тестов. Например:

Структура проекта:

.
├── .babelrc
├── .editorconfig
├── .gitignore
├── .nycrc
├── .prettierrc
├── LICENSE
├── README.md
├── jasmine.json
├── package-lock.json
├── package.json
└── src
    ├── helpers
    │   ├── console-reporter.js
    │   ├── fake-server-setup.js
    │   └── jsdom.js
    └── stackoverflow
        ├── 60138152
        ├── 61121812
        ├── 61277026
        ├── 61643544
        ├── 61985831
        └── 62172073

fake-server-setup.js:

const express = require('express');

beforeAll((done) => {
  const app = express();
  global.app = app;
  const port = 3000;
  app.get('/api', (req, res) => {
    res.sendStatus(200);
  });
  app.listen(port, () => {
    done();
    console.log('server is listening on port:' + port);
  });
});

Мы сохраняем переменную app, которую будем использовать в каждом тестовом файле, в переменную global.

a.test.js:

const supertest = require('supertest');
describe('62172073 - a', () => {
  it('should pass', () => {
    return supertest(global.app).get('/api').expect(200);
  });
});

b.test.js:

const supertest = require('supertest');
describe('62172073 - b', () => {
  it('should pass', () => {
    return supertest(global.app).get('/api').expect(200);
  });
});

jasmine.json:

{
  "spec_dir": "src",
  "spec_files": ["**/?(*.)+(spec|test).[jt]s?(x)"],
  "helpers": ["helpers/**/*.js", "../node_modules/@babel/register/lib/node.js"],
  "stopSpecOnExpectationFailure": false,
  "random": true
}

Результат испытаний:

Executing 2 defined specs...
Running in random order... (seed: 03767)

Test Suites & Specs:
(node:54373) ExperimentalWarning: The fs.promises API is experimental

1. 62172073 - bserver is listening on port:3000

   ✔ should pass (51ms)

2. 62172073 - a
   ✔ should pass (5ms)

>> Done!


Summary:

????  Passed
Suites:  2 of 2
Specs:   2 of 2
Expects: 0 (none executed)
Finished in 0.085 seconds
04.06.2020
  • Все еще нужно проверить ваш подход, и если он сработает, я приму ваш ответ. В целом очень подробный, информативный и в целом хороший ответ. Спасибо. 04.06.2020
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...