Free Resource

The Complete SCORM Testing Checklist

The same checklist I use for professional SCORM testing. Covers functionality, data tracking, cross-browser compatibility, and common errors.

Last updated: December 2025 | Works for SCORM 1.2, SCORM 2004, and cmi5

Why Testing Matters

A course that works in preview mode can still fail spectacularly in production. SCORM packages interact with LMS platforms through a standardised API, but "standardised" doesn't mean "identical." Every LMS implements SCORM slightly differently.

This checklist helps you catch issues before your learners do. Use it for every course, every time. The 20 minutes you spend testing will save hours of troubleshooting later.

Before You Start

  • Identify your SCORM version (1.2 or 2004)
  • Document expected behaviours (pass score, completion criteria)
  • Prepare test scenarios (pass, fail, partial completion)
  • Have access to SCORM Cloud or your target LMS

Package Validation

Before uploading to any LMS, verify your SCORM package structure is correct.

Manifest file exists at root

The imsmanifest.xml file must be at the root level of your ZIP, not in a subdirectory.

Tip: Unzip your package and check - the manifest should be immediately visible, not inside a folder.

Manifest XML is valid

The imsmanifest.xml must be well-formed XML with no syntax errors.

Tip: Open in a browser or XML validator - browsers will show parsing errors clearly.

All resource references exist

Every file referenced in the manifest actually exists in the package.

Tip: Check for typos in filenames and case sensitivity issues (Linux servers are case-sensitive).

SCO vs Asset declaration correct

Resources are correctly declared as SCO (trackable) or Asset (static content).

Tip: Only SCOs communicate with the LMS API. If tracking isn't working, check this first.

Unique resource identifiers

All resource IDs in the manifest are unique - no duplicates.

Tip: Duplicate IDs can cause unpredictable behaviour in different LMS platforms.

No absolute paths

All file paths in the manifest and course content are relative, not absolute.

Tip: Paths like "C:\Users\..." or "file:///" will fail when deployed to an LMS.

Functional Testing

Test the basic functionality of your course before checking SCORM-specific features.

Course launches correctly

The course opens without errors and displays the first screen properly.

Tip: Check browser console for JavaScript errors during launch.

All navigation works

Next, previous, menu, and any custom navigation function correctly.

Tip: Test keyboard navigation (arrow keys, Enter) as well as mouse clicks.

Media plays correctly

All videos, audio, and animations play as expected with proper controls.

Tip: Test with both autoplay on and off, as browsers handle these differently.

Interactions function

Drag-and-drop, clicks, hovers, and form inputs work properly.

Tip: Test on touch devices as well as desktop if the course should be mobile-responsive.

Quizzes score correctly

Questions record correct/incorrect answers and calculate scores properly.

Tip: Test edge cases: minimum passing score, maximum score, zero score.

Course closes cleanly

The course exits without errors when the learner finishes or closes the window.

Tip: Check that the Terminate/Finish API call is made before the window closes.

Accessibility Testing

WCAG 2.2 AA compliance is now the industry standard for corporate training. Test these critical areas.

Keyboard navigation works

All interactive elements can be accessed and operated using only a keyboard (Tab, Enter, Arrow keys).

Tip: Try completing the entire course without using a mouse. Focus indicators should be clearly visible.

Focus order is logical

When tabbing through the course, focus moves in a logical, predictable order.

Tip: Focus should follow visual reading order - left to right, top to bottom for English content.

Color contrast meets standards

Text has at least 4.5:1 contrast ratio against its background (3:1 for large text).

Tip: Use the WAVE browser extension or WebAIM contrast checker to verify.

Images have alt text

All meaningful images have descriptive alt text; decorative images are marked as such.

Tip: Screen readers will read alt text aloud. Ensure descriptions are helpful, not just "image1.png".

Videos have captions

All video content has accurate closed captions or subtitles available.

Tip: Auto-generated captions often have errors. Review and correct them manually.

Audio has transcripts

Audio-only content has text transcripts available.

Tip: Transcripts also benefit learners in noisy environments or those who prefer reading.

Screen reader compatible

Test with at least one screen reader (NVDA, JAWS, or VoiceOver).

Tip: NVDA is free and works on Windows. VoiceOver is built into macOS and iOS.

No flashing content

Content doesn't flash more than 3 times per second (seizure risk).

Tip: This includes animated GIFs, videos, and JavaScript animations.

SCORM Data Testing

Verify that your course correctly communicates with the LMS through the SCORM API.

API initialises correctly

LMSInitialize() (1.2) or Initialize() (2004) is called before any other API calls.

Tip: Check browser console for "Initialize" calls. If missing, nothing else will work.

Data commits regularly

LMSCommit() is called periodically to save progress, not just at the end.

Tip: If the browser crashes or network drops, uncommitted data is lost. Commit after each interaction.

Clean termination on exit

LMSFinish() (1.2) or Terminate() (2004) is called before the course window closes.

Tip: Use onbeforeunload handler. Test by closing the browser tab mid-course.

Completion status updates

cmi.core.lesson_status (1.2) or cmi.completion_status (2004) changes to "completed" when appropriate.

Tip: Test both completing the course AND closing it before completion.

Success/failure status tracks

Pass/fail status reflects quiz performance correctly.

Tip: For SCORM 2004, check cmi.success_status separately from completion_status.

Score reports accurately

The score shown to the learner matches what's reported to the LMS.

Tip: Check cmi.core.score.raw, cmi.core.score.min, and cmi.core.score.max values.

Suspend data saves

Bookmark/progress data is saved so learners can resume where they left off.

Tip: SCORM 1.2 limit is 4,096 characters. If your course has complex state, you may exceed this.

Time tracking records

Session time and total time report correctly to the LMS.

Tip: Leave the course open for a known duration, then verify the time reported.

Resume & Bookmark Testing

Suspend/resume is one of the most common failure points. Test these edge cases thoroughly.

Resume from mid-course

Close the course partway through, relaunch, and verify it returns to the correct slide.

Tip: Test at multiple points: beginning, middle, near end, and after completion.

Resume from mid-quiz

Close while answering a quiz, relaunch, and verify quiz state is preserved.

Tip: Some courses lose quiz progress on resume. Decide if this is acceptable for your use case.

Resume from mid-video

Close while a video is playing, relaunch, and check if playback position is restored.

Tip: Video bookmarking requires additional implementation - it's not automatic.

Resume after extended time

Wait several hours or days between sessions to verify suspend data persists.

Tip: Some LMS platforms have session timeouts that can affect resume behaviour.

Resume after course update

If you update and republish the course, test what happens to existing learner progress.

Tip: Structure changes can break bookmark data. Plan for this in your update process.

Suspend data size check

Verify your suspend data doesn't exceed limits (4,096 chars for SCORM 1.2).

Tip: Test with maximum possible progress to check worst-case data size.

Cross-Environment Testing

Your course needs to work across different browsers, devices, and LMS platforms. Each has specific quirks.

Chrome (latest)

Test all functionality in the latest Chrome browser.

Tip: Chrome is typically the most permissive. Known issue: Mixed content (HTTP resources on HTTPS) will be blocked.

Firefox (latest)

Test all functionality in the latest Firefox browser.

Tip: Known issue: Autoplay is disabled by default. Courses may hang on loading screens waiting for video/audio.

Safari (latest)

Test all functionality in Safari on macOS.

Tip: Known issue: Intelligent Tracking Prevention can block third-party cookies, breaking SCORM in iframes.

Edge (latest)

Test all functionality in Microsoft Edge.

Tip: Edge is Chromium-based. Known issue: Corporate policies may enable Enhanced Security Mode, blocking some scripts.

iOS Safari

Test on iPhone/iPad if mobile support is required.

Tip: Known issues: No autoplay, 44px minimum touch targets, viewport quirks. Test in both portrait and landscape.

Android Chrome

Test on Android devices if mobile support is required.

Tip: Known issue: Low-end devices may struggle with complex animations. Test on mid-range devices too.

Target LMS

Test in the actual LMS where the course will be deployed.

Tip: Critical: LMS-specific bugs often don't appear in SCORM Cloud. Test pass, fail, and resume scenarios.

LMS Mastery Score setting

Check if your LMS uses its own mastery score calculation that overrides course-reported status.

Tip: Some LMS platforms ignore course pass/fail and calculate their own. This causes "passed in course, failed in LMS" issues.

Common Errors & Solutions

These are the issues I see most frequently when testing SCORM packages. Save this reference for troubleshooting.

ErrorCommon CauseSolution
Course won't completeMissing cmi.core.lesson_status or cmi.completion_status API callAdd status update call on final slide or quiz completion
Resume doesn't workSuspend data exceeds 4,096 characters (SCORM 1.2)Reduce bookmark data size or upgrade to SCORM 2004
Score shows 0Using wrong score element or not setting min/max valuesUse cmi.core.score.raw and set cmi.core.score.min/max
Status resets on re-launchLMSCommit() not called before window closeCall LMSCommit() and LMSFinish() in onbeforeunload handler
Works in SCORM Cloud, fails in LMSLMS-specific implementation differencesTest in target LMS and check API call timing
Completed but shows incompleteBoth completion AND success status required by LMSSet both completion_status and success_status (SCORM 2004)
Course passes but LMS shows failLMS "Mastery Score" setting overrides course-reported statusDisable LMS mastery score or ensure score meets LMS threshold
Course hangs on loading (Firefox)Firefox blocks autoplay by defaultAdd user interaction before playing media, or use muted autoplay
Manifest not found errorimsmanifest.xml in subdirectory instead of ZIP rootRepackage with manifest at root level of ZIP file
API not found / LMS not detectedCourse not finding SCORM API in parent framesCheck API discovery code scans all parent/opener frames
Course works once, fails on retryEntry status not being checked on re-launchCheck cmi.core.entry (1.2) or cmi.entry (2004) on Initialize

SCORM 1.2 vs 2004: Key Differences

Testing approach varies depending on your SCORM version. Here are the critical differences to keep in mind.

SCORM 1.2

  • Suspend data limit: 4,096 characters
  • Status element: cmi.core.lesson_status
  • Combined completion + success status
  • No sequencing/navigation rules
  • Wider LMS compatibility

SCORM 2004

  • Suspend data limit: 64,000 characters
  • Separate: cmi.completion_status + cmi.success_status
  • Sequencing & navigation controls
  • Detailed interaction tracking
  • Multiple editions (2nd, 3rd, 4th)

Future-Proofing: cmi5 & xAPI

If you're planning to migrate from SCORM to modern standards, here's what you need to know about testing differences.

What is cmi5?

cmi5 bridges SCORM and xAPI. It uses xAPI statements for tracking but maintains LMS launch and session management like SCORM.

  • Manifest file is cmi5.xml
  • Uses REST/JSON instead of JavaScript API
  • Data stored in Learning Record Store (LRS)

Testing Differences

cmi5 testing requires different tools and approaches than SCORM testing.

  • SCORM Cloud also supports cmi5 testing
  • Check xAPI statements in LRS, not JavaScript console
  • Verify AU (Assignable Unit) registration works

Migration tip: If converting SCORM to xAPI/cmi5, test both versions side-by-side initially. Track the same learner actions and compare what each system records.

Free Testing Tools

These tools will help you test your SCORM packages. Each has strengths and limitations.

SCORM Cloud

The industry standard for SCORM testing. Upload your package, run through the course, and review detailed debug logs.

Comprehensive debug logsLimited free tier (10 registrations)

Browser Developer Tools

Use the browser console (F12) to monitor JavaScript errors and network requests during course playback.

Always available, no signupRequires technical knowledge

Your Target LMS

Nothing beats testing in the actual LMS. Most platforms have a test/preview mode for developers.

Tests real-world conditionsMay require admin access

Local Moodle Installation

Set up Moodle locally using XAMPP, Docker, or Moodle's Bitnami package. Full LMS testing without cloud uploads.

Free, full LMS features, no data limitsTechnical setup required

SCORM Again (pipwerks)

Open-source JavaScript library that includes a test harness for local SCORM debugging.

Runs locally, shows all API callsDeveloper-focused tool

WAVE Accessibility Tool

Browser extension that checks web content for accessibility issues (WCAG compliance).

Free, visual feedbackOnly checks visible content

NVDA Screen Reader

Free, open-source screen reader for Windows. Essential for testing accessibility.

Free, widely usedWindows only

Need Professional Testing?

This checklist covers the basics, but professional testing catches issues that DIY testing misses. Get expert analysis, detailed reports, and fix recommendations.

Scout the Learning Dog - your friendly SCORM guide

Have a Course That Needs Testing?

Send me your SCORM package and I'll have a detailed test report back to you within 24-48 hours.

Free 30-min consultation
Same-day response
No obligation