Running jasminejs tests of javascript modules in a browser is straight forward, but requires small adjustments, since a module loads asynchronously, while jasmine's default runtime assumes code loads synchronously. The approach I take is the same as the one used to test requirejs AMD modules:
- customize jasmine boot, so that it does not automatically launch test execution on page load
- write a testMain.js script that imports all the spec's for your test suite, then launches jasmine's test execution
For example, this is the root test suite (testMain.ts) for the @littleware/little-elements module:
import './test/spec/utilSpec.js'; import './arrivalPie/spec/arrivalPieSpec.js'; import './styleGuide/spec/styleGuideSpec.js'; import {startTest} from './test/util.js'; startTest();
The startTest() function is a little wrapper that detects whether karmajs is the test runtime, since the test bootstrap process is a little different in that scenario. The karmajs config file should also annotate javascript module files with a module type. For example, here is an excerpt from little-element's karma.conf.js:
files: [ 'lib/test/karmaAdapter.js', { pattern: 'lib/arrivalPie/**/*.js', type: 'module', included: false }, { pattern: 'lib/styleGuide/**/*.js', type: 'module', included: false }, { pattern: 'lib/test/**/*.js', type: 'module', included: false }, { pattern: 'lib/testMain.js', type: 'module', included: true }, { pattern: 'node_modules/lit-html/*.js', type: 'module', included: false } ],
Feel free to import the @littleware/little-elements module into your project if it will be helpful!