fix: показывать вывод программы студента на панели «вывод»#853
Merged
Conversation
Тесты выводных уроков глушили console.log студента строкой
vi.spyOn(console, 'log').mockImplementation(() => {}): вызовы писались в
spy.mock.calls (поэтому assert работал и задание засчитывалось), но
настоящей печати не было — на панели «вывод» студент своего результата
не видел.
Сняли .mockImplementation(() => {}) в 44 test.js — шпион теперь и
записывает вызовы (assert цел), и вызывает настоящий console.log.
Добавили disableConsoleIntercept: true в vitest.config.js, чтобы вывод
шёл в stdout чисто, без служебного префикса vitest (stdout | test.js > ...).
Это прямой аналог pytest --capture=no из фикса Python.
Невыводные уроки (проверяют возвращаемое значение) и 10-basics/20-comments
не менялись.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Имя теста в каждом из 71 test.js теперь равно слагу урока (каталог без числового префикса, дефисы → пробелы): 'hello world', 'string concatenation', 'if', 'while', 'define function' и т.д. Раньше было 'hello world' у выводных и разрозненные 'test'/'mirror'/'printNumbers'. Теперь на панели «вывод» заголовок кейса отражает тему урока. Только строка-описание, на assert не влияет. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f1cf921 to
c6a6fc4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Проблема
На панели «вывод» в JS-уроках студент не видел результат своего кода — только отчёт vitest. Аналог уже починенного в Python (exercises-python#370).
Панель показывает дословный stdout от
make test(→ vitest). Тесты «выводных» уроков глушили вывод строкой:Она записывает вызовы в
spy.mock.calls(поэтому assert работает и задание засчитывается), но подменяетconsole.logпустышкой — реальной печати нет.Решение
Двухчастное:
.mockImplementation(() => {})в 44test.js.vi.spyOn(console, 'log')без реализации и записывает вызовы (assert цел), и вызывает настоящийconsole.log.disableConsoleIntercept: trueвvitest.config.js. Иначе vitest перехватывает консоль и печатает с префиксомstdout | test.js > <тест>. С флагом вывод идёт в stdout чисто — прямой аналог pytest--capture=no.Наглядно (урок
10-hello-world):stdout | test.js > hello worldHello, World!disableConsoleInterceptHello, World!Предметные имена тест-кейсов (второй коммит)
Имя теста в каждом из 71
test.jsприведено к теме урока — слаг каталога без числового префикса, дефисы → пробелы ('hello world','string concatenation','if','while','define function'…). Раньше было'hello world'у выводных и разрозненные'test'/'mirror'/'printNumbers'. Теперь на панели заголовок кейса отражает тему урока. Это только строка-описание — на assert не влияет.Область изменений
vitest.config.js— одна опция.test.js— снятие мока (паттерн байт-в-байт единообразен), включая 2 урока с вызовом функции (40-define-functions/100-define-function,50-loops/10-while).test.js— предметное имя кейса.Не менялись по существу: 27 невыводных
test.js(проверяют возвращаемое значение) и10-basics/20-comments— только имя кейса.Проверка
Hello, World!, многострочный, countdown); заголовок кейса — тема урока (✓ test.js > if,✓ test.js > while).make compose-test— вся сюита зелёная.make compose-code-lint(tsc --build+ biome) — без ошибок (exit 0; warnings вbiome.json— pre-existing, не относятся к правке).🤖 Generated with Claude Code