--- title: "Free SCORM Testing Checklist (2026) — 50+ QA Checks | SCORM Specialist" canonical_url: "https://scormspecialist.co.uk/resources/scorm-testing-checklist" last_updated: "2026-05-20T11:34:32.647Z" meta: description: "The exact SCORM testing checklist I use on every project. 50+ checks covering tracking, completion, bookmarking, cross-browser, and LMS compatibility. SCORM 1.2, 2004 & cmi5." "og:description": "The exact SCORM testing checklist I use on every project. 50+ checks covering tracking, completion, bookmarking, cross-browser, and LMS compatibility." "og:title": "Free SCORM Testing Checklist (2026) — 50+ QA Checks" --- 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: April 2026 | 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. | **Error ** | **Common Cause ** | **Solution ** | | --- | --- | --- | | **Course won't complete** | Missing cmi.core.lesson_status or cmi.completion_status API call | Add status update call on final slide or quiz completion | | **Resume doesn't work** | Suspend data exceeds 4,096 characters (SCORM 1.2) | Reduce bookmark data size or upgrade to SCORM 2004 | | **Score shows 0** | Using wrong score element or not setting min/max values | Use cmi.core.score.raw and set cmi.core.score.min/max | | **Status resets on re-launch** | LMSCommit() not called before window close | Call LMSCommit() and LMSFinish() in onbeforeunload handler | | **Works in SCORM Cloud, fails in LMS** | LMS-specific implementation differences | Test in target LMS and check API call timing | | **Completed but shows incomplete** | Both completion AND success status required by LMS | Set both completion_status and success_status (SCORM 2004) | | **Course passes but LMS shows fail** | LMS "Mastery Score" setting overrides course-reported status | Disable LMS mastery score or ensure score meets LMS threshold | | **Course hangs on loading (Firefox)** | Firefox blocks autoplay by default | Add user interaction before playing media, or use muted autoplay | | **Manifest not found error** | imsmanifest.xml in subdirectory instead of ZIP root | Repackage with manifest at root level of ZIP file | | **API not found / LMS not detected** | Course not finding SCORM API in parent frames | Check API discovery code scans all parent/opener frames | | **Course works once, fails on retry** | Entry status not being checked on re-launch | Check 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~~](https://cloud.scorm.com) 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. [**Professional Testing Services **](https://scormspecialist.co.uk/services/scorm-testing) [**Get a Quote **](https://scormspecialist.co.uk/contact) [** Got a SCORM emergency? **](https://scormspecialist.co.uk/scorm-emergency)![Scout the Learning Dog - your friendly SCORM guide](https://scormspecialist.co.uk/scout/scout-happy.svg) ## **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. [**Get Testing Quote**](https://scormspecialist.co.uk/contact) [**See All Services**](https://scormspecialist.co.uk/services)**Free 30-min consultation****Same-day response****No obligation**