Skip to content

Instantly share code, notes, and snippets.

@JustAGod1
Created March 22, 2022 12:21
Show Gist options
  • Save JustAGod1/a3749441a7fcc835c5e377d4a0d2a060 to your computer and use it in GitHub Desktop.
Save JustAGod1/a3749441a7fcc835c5e377d4a0d2a060 to your computer and use it in GitHub Desktop.
Пояснение к жс

Настройка жс тестов в идее

Этот гайд подразумевает из себя продолжение предыдущего гайда, который можно найти по ссылке.
Тут мы рассмотрим как запускать тесты по жс так чтоб не выстрелить себе в ногу и продолжить держать изначальный проект в порядке не уродуя его хаотичными перемещениями файлов или добавлением новых Source set'ов

Теория

Мне кажется, что лучше всего понимается как запускать тесты когда ты понимаешь как они устроенны и почему. Потому тут по фасту разберем что да как, а потом уже приступим к настройке

пропустить теорию

Что такое Graal

Так как недавно в репозиторий добавили сию штуку ровно перед лабами по жс наверно стоит пояснить что это.

Собственно Graal VM это грубо говоря просто либа для запуска JS из жавы. То есть в нашем случае тесты выступают как виртуальная машина для JS.

Как работают тесты

По не очень понятной причине в репозитории появилось большое кол-во страшных .sh и .cmd файлов из чего можно наверно было бы сделать вывод что с приходом JS все поменялось, но нет, мы все еще тестируем все в жаве процессах и в тестах даже остался во многом старый код.

Алгоритм работы тестов:

  1. Запуск жава класса
  2. Запуск Graal VM
  3. Чтение вашего JS файла и засовывание его в Graal VM
  4. После этого работа тестов с вашим JS кодом будет очень похода на работу с мапой в которой ключ это имя, а значение это функция или переменная или типа того.

Из этого следует замечательный факт, что нам нужно будет запустить жава процесс. А если есть жава процесс, который использует Graal VM то получается нужно как-то сунуть в этот самый жава процесс библиотеку.

Вот собственно примерно этим и занимаются те .sh скрипты в репозитории. Но запуская скриптами мы создаем грязь в нашем проекте и лишаемся возможности использовать дебаггер.

Ну и вот тут переходим к настройке.

Настройка

Так как я считаю, что вы использовали гайд доступный по вот этой ссылке у вас в проекте должна быть структура по типу после того как вы спуллите репозиторий.

paradigms-2022/
├── artifacts
├── java
├── javascript
└── solution
    └── java-solutions

Первое, что нужно сделать это создать папку javascript-solutions в папке solution. Именно в этой папке мы будем делать создавать свои решения.

Далее нам нужно отметить папку paradigms-2022/javascript как Source set потому что там жава классы, которые как раз занимаются тестированием жс. image Далее нам надо добавить папку paradigms-2022/javascript/graal как папку с библиотеками image

Теперь нас будет интересовать папка javascript/jstest/functional в ней собраны тесты для для первой лабы по жс. Допустим первое, что мы хотим сделать это потетстить как мы реализовали первый пункт дз.

  1. Пишем решение в solution/javascript-solutions/functionalExpression.js
  2. Переходим в файл javascript/jstest/functional/FunctionalTest.java
  3. Тыкаем

image

Прописываем Working directory так чтоб оно указывало на `solution/javascript-solutions` В моем случае это выглядит вот так

image

Потом

image

И тут прописываем `-ea`

image

Далее в Program arguments прописываем всякие там hard base, сохраняем и запускаем.

У меня получилось как-то так image

@Nypiaka
Copy link

Nypiaka commented Mar 22, 2022

Когда я сделал всё по инструкции, сборщик орал, что не видит base. Если у вас такая же ошибка, пихните base в javascript и всё заработает. А Юре безграничное спасибо.

@JustAGod1
Copy link
Author

Когда я сделал всё по инструкции, сборщик орал, что не видит base. Если у вас такая же ошибка, пихните base в javascript и всё заработает. А Юре безграничное спасибо.

Не не это не так работает

Это всегда плохая идея что-то куда то двигать в репозитории, который не твой.

Надо тыкнуть вот сюда
image
И потом на всякий случай вот сюда
image

По идее это было описано в предыдущем туториале

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment