Обновлено 4 ноября 2026 года.
Чтобы создать SCORM-тест, необязательно покупать редактор электронных курсов. Небольшой тест можно собрать из HTML, CSS и JavaScript, упаковать в ZIP и загрузить в LMS. Нейросеть поможет подготовить вопросы, изменить оформление и разобраться с кодом. Но проверять учебную логику и результат в системе обучения всё равно придётся автору.
В этой статье — обновлённый пример: пять вопросов, проходной балл, обратная связь и возобновление прерванной попытки. Его можно скачать, заменить вопросы и использовать как основу своего теста.
Скачать готовый SCORM-тест 1.2 · Скачать исходники с инструкцией и проверками · Скачать запрос к нейросети
Когда имеет смысл делать тест без редактора
Такой подход удобен для короткой проверки знаний, нестандартного интерфейса или небольшого учебного проекта. Все файлы остаются у вас: можно поменять логику, шрифты и вопросы, а затем перенести пакет в другую LMS с поддержкой нужной версии SCORM.
Обратная сторона — сопровождение. Когда тестов много, над ними работает команда и регулярно меняется содержание, готовый редактор может оказаться удобнее. А если перенос между платформами не нужен, сначала посмотрите на встроенный инструмент тестирования вашей LMS.
Нейросеть снижает порог входа в разработку, но не отменяет его. Полезно понимать, где лежат вопросы, как считается результат и что именно курс сообщает LMS. Для замены содержания в нашем примере достаточно отредактировать один файл.
Что находится внутри SCORM-пакета
У теста три основные части: страница с вопросами, код обмена данными с LMS и imsmanifest.xml. Манифест описывает структуру пакета и точку запуска; это не просто файл, который нужно положить рядом «для галочки». В ZIP он должен находиться в корне. Описание упаковки есть в документации Rustici Software.
imsmanifest.xml ← в корне ZIP
index.html ← страница теста
style.css ← оформление
js/
questions.js ← вопросы, ответы и проходной порог
engine.js ← расчёт результата и состояние попытки
scorm.js ← связь с LMS, SCORM 1.2
app.js ← интерфейс
*.xsd ← схемы XML
Пример работает без сборщика, внешних библиотек, сервера с базой данных и запросов к нейросети. ИИ используется на этапе разработки. Для прохождения готового теста участнику не нужны аккаунт в нейросети и API-ключ.
Какую версию выбрать: SCORM 1.2 или SCORM 2004
Для скачиваемого примера я выбрал SCORM 1.2. Его поддерживает штатный SCORM-модуль Moodle. Полной поддержки SCORM 2004 в этом модуле нет — это прямо указано в документации Moodle. Для другой LMS уточните поддерживаемую версию у её администратора.
Нельзя превратить пакет 1.2 в 2004, просто поменяв цифру в манифесте. Отличаются API, поля данных и сам манифест. В частности, в SCORM 1.2 используется cmi.core.lesson_status, а в 2004 завершение и успешность разделены: cmi.completion_status и cmi.success_status.
В прежней версии статьи была ошибка в формуле для SCORM 2004: нормализованный балл умножался на 100. Для обычного теста cmi.score.scaled передаётся как доля: четыре правильных ответа из пяти — 0.8. Значение 80 сюда не подходит. Сверять названия и диапазоны полей удобно по справочнику SCORM API.
Как работает готовый пример
В тесте пять вопросов с одним правильным ответом. За каждый начисляется один балл. Проходной порог — 80%, то есть четыре ответа из пяти. До завершения участник может возвращаться к вопросам и менять выбор. После завершения видит результат и объяснение к каждому заданию.
- После выбора ответа тест сохраняет состояние через LMS.
- При повторном входе в ту же попытку восстанавливает ответы.
- После завершения передаёт процент и статус
passedилиfailed. - Завершённая попытка открывается для просмотра. Новую попытку запускают средствами LMS.
- Если LMS отклоняет сохранение, тест показывает ошибку и позволяет повторить отправку.
При обычном открытии index.html включается деморежим: можно пройти вопросы, но результат не передаётся в LMS, а после перезагрузки ответы сбрасываются. Если API найден, но подключение завершилось ошибкой, тест сообщает об этом и не маскирует сбой деморежимом.
Это учебный шаблон: до 30 вопросов, один правильный вариант, одинаковый вес заданий, фиксированный порядок. В LMS передаётся общий результат; отчёта по каждому вопросу через cmi.interactions в этом примере нет. Правильные ответы находятся в скачиваемом JavaScript, поэтому такой тест не подходит для защищённого экзамена.
Шаг 1. Подготовьте вопросы с нейросетью
Начните с учебной задачи. Например: «После обучения сотрудник выбирает правильный способ обработки обращения». Затем дайте нейросети проверенный источник и попросите составить ситуации, в которых нужно принять решение. Просьба «сделай тест на десять вопросов» без материала часто приводит к общим вопросам и спорным ответам.
Подготовь 5 вопросов для проверки знаний.
Аудитория: [кто проходит обучение].
Учебная цель: [какое действие должен освоить участник].
Источник: [вставьте разрешённый к использованию материал].
Используй только факты из источника. Если информации не хватает,
задай вопрос, а не придумывай правило.
В каждом задании — короткая рабочая ситуация, 3 варианта
и ровно один правильный ответ. Неверные варианты должны быть
правдоподобными, без подсказок по длине или формулировке.
Добавь объяснение и укажи фрагмент источника, который подтверждает ответ.
Сначала выдай вопросы для проверки автором, без программного кода.
Проверьте, что у каждого задания действительно один правильный ответ, все условия есть в вопросе, а объяснение помогает понять решение. Только после этого превращайте утверждённые вопросы в данные теста. Для работы с корпоративными материалами используйте разрешённый в вашей организации сервис.
Шаг 2. Замените содержание в questions.js
Распакуйте исходники и откройте course/js/questions.js в текстовом редакторе. Название теста задаётся в title, короткое описание — в description, порог — в passingPercent. В массиве questions находятся задания:
{
id: 'manifest',
text: 'Где должен находиться imsmanifest.xml в SCORM ZIP?',
options: [
'В корне архива',
'В папке с изображениями',
'Только на сервере LMS'
],
correct: 0,
feedback: 'Манифест кладут в корень ZIP, без внешней папки.'
}
correct — индекс правильного варианта, начиная с нуля: первый вариант — 0, второй — 1, третий — 2. id должен быть уникальным; используйте латинские буквы, цифры, дефис и подчёркивание. Вопросы и пояснения можно писать по-русски.
Если не хочется редактировать JavaScript вручную, передайте нейросети файл-шаблон и утверждённые вопросы:
Замени только содержание course/js/questions.js моими вопросами.
Сохрани window.QUIZ, структуру объектов и названия полей.
correct — индекс с нуля. Сохрани один правильный ответ на вопрос.
Задай passingPercent: 80 и обнови version.
Не меняй engine.js, scorm.js, app.js и imsmanifest.xml.
Проверь уникальность id и соответствие correct вариантам ответа.
Верни целый файл questions.js, без сокращений и заглушек.
Когда меняется банк вопросов, старые ответы нельзя бездумно применять к новому тесту. В примере есть проверка отпечатка содержания: несовместимая сохранённая попытка блокирует продолжение и не перезаписывается. Для новой версии лучше создать отдельную тестовую активность в LMS и проверить её до замены действующей.
Шаг 3. При необходимости измените оформление
Попросите нейросеть работать с конкретным файлом и ограничьте задачу. Например: «Измени только style.css: примени эти цвета, увеличь шрифт и сохрани видимый фокус клавиатуры. Не меняй логику и связь с LMS». После правок проверьте длинные вопросы, варианты в несколько строк и узкое окно телефона.
Если нужен другой тип задания — несколько правильных ответов, сопоставление или ввод текста, — изменения затронут уже модель данных и подсчёт баллов. Одной заменой оформления это не решается. Попросите нейросеть сначала объяснить необходимые изменения, затем внесите их отдельным шагом и повторите проверки.
Как тест передаёт результат в LMS
Файл scorm.js — небольшой адаптер именно для этого примера и SCORM 1.2. Он находит API, открывает сессию, сохраняет данные и завершает обмен. Для более широкого проекта можно рассмотреть готовую обёртку, например pipwerks SCORM API Wrapper; она поддерживает обе версии стандарта. Но обёртка сама по себе не исправляет неверные поля данных.
Для завершённой попытки наш адаптер передаёт такие значения:
// Фрагмент логики SCORM 1.2, не самостоятельная программа.
api.LMSSetValue('cmi.core.score.min', '0');
api.LMSSetValue('cmi.core.score.max', '100');
api.LMSSetValue('cmi.core.score.raw', String(percent));
api.LMSSetValue('cmi.core.lesson_status', passed ? 'passed' : 'failed');
api.LMSCommit('');
Ответы хранятся компактно в cmi.suspend_data. При выходе используется suspend, чтобы можно было вернуться к той же попытке, в том числе посмотреть итог. Кнопка завершения закрывает сессию через LMSFinish. Полный код также проверяет ответы API и передаёт время сессии.
Надпись «тест сдан» на экране — это ещё не подтверждение записи в журнале оценок. Поэтому в примере отдельно показывается, подтвердила ли LMS сохранение. Даже успешный ответ API затем нужно сопоставить с отчётом самой платформы.
Шаг 4. Соберите ZIP и загрузите его в LMS
- Для знакомства загрузите готовый демопакет SCORM 1.2. Его не нужно распаковывать перед импортом.
- Для своей версии распакуйте исходники, измените вопросы и проверьте
course/index.htmlв браузере. - При изменении названия обновите оба элемента
titleвcourse/imsmanifest.xml. Для самостоятельного нового теста задайте свойmanifest identifier. - Выделите содержимое папки course и создайте ZIP. Внутри сразу должны быть видны
imsmanifest.xml,index.htmlи остальные файлы; внешней папкиcourseбыть не должно. - В LMS создайте SCORM-активность и загрузите архив. В Moodle это элемент «Пакет SCORM»; название пункта зависит от языка интерфейса.
- Проверьте правила оценки, количество попыток и условия завершения в настройках LMS. Условия курса и условия активности должны согласовываться.
В архиве исходников есть также build.py. Если установлен Python 3, команда python3 build.py соберёт пакет из папки course без лишней внешней директории. Это удобно после повторных правок.
Шаг 5. Проверьте тест в своей системе обучения
Перед выдачей участникам пройдите несколько сценариев. Проверять нужно не только экран теста, но и сохранённые данные в LMS.
| Сценарий | Что ожидается |
|---|---|
| 4 верных ответа из 5 | 80%, статус passed |
| 3 верных ответа из 5 | 60%, статус failed |
| Есть пропущенные вопросы | Тест предлагает ответить на них, итог не отправляется |
| Выбрать ответы, выйти и вернуться в ту же попытку | Выбор восстановлен; попытка ещё incomplete |
| Снова открыть завершённую попытку | Показывается итог, результат не сбрасывается |
| Запустить новую попытку через LMS | Новый тест начинается без старых ответов |
Что проверено в приложенном примере: расчёт результата, сохранение и восстановление состояния, ошибки API и завершение сессии — автоматическими проверками; манифест — по XSD; интерфейс, возврат к ответам и повторная отправка после отказа — в Chrome на локальном имитаторе SCORM API. Проверка в конкретной LMS и официальная сертификация SCORM не проводились. Локальный стенд и проверки включены в исходники.
Что делать, если пакет не работает
- LMS не принимает ZIP. Проверьте наличие манифеста в корне и соответствие версии стандарта возможностям платформы.
- В LMS виден деморежим. Убедитесь, что пакет запущен именно как SCORM-активность, а не обычная ссылка на HTML. Проверьте журнал SCORM API и ошибки браузера.
- Балл виден в тесте, но отсутствует в отчёте. Посмотрите ошибки сохранения, журнал API и настройки оценивания активности.
- Ответы не восстанавливаются. Убедитесь, что LMS открывает ту же попытку и после её начала не менялся банк вопросов.
Нейросети можно передать текст ошибки и небольшой фрагмент кода без персональных данных. Просите объяснить причину и исправить конкретный участок. После исправления снова пройдите успешный, неуспешный и прерванный сценарии.
Начните со скачиваемого примера, замените содержание и проверьте его в своей LMS. Так вы получите небольшой тест, устройство которого понимаете и можете менять под свою учебную задачу.