title: Test Runner Mocha
eleventyNavigation:
key: Mocha
parent: Test Runner
order: 100
Test Runner Mocha
Test framework implementation of Mocha for Web Test Runner
See @web/test-runner for a default implementation and CLI for the test runner.
Writing JS tests
Mocha relies on global variables, in any JS test file describe
and it
are available globally and can be used directly:
describe('my test', () => {
it('foo is bar', () => {
if ('foo' !== 'bar') {
throw new Error('foo does not equal bar');
}
});
});
Writing HTML tests
If you're writing tests as HTML, you can import this library to run tests with mocha.
Inline tests
You can write tests inline in the HTML page
View example
<html>
<body>
<script type="module">
import { mocha, sessionFinished, sessionFailed } from '@web/test-runner-mocha';
try {
mocha.setup({ ui: 'bdd' });
describe('HTML tests', () => {
it('works', () => {
expect('foo').to.equal('foo');
});
});
mocha.run(() => {
sessionFinished();
});
} catch (error) {
console.error(error);
sessionFailed(error);
}
</script>
</body>
</html>
Loading test files
You can also use dynamic imports to load tests written in JS from the HTML page.
View example
<html>
<body>
<script type="module">
import { mocha, sessionFinished } from '@web/test-runner-mocha';
async function run() {
try {
mocha.setup({ ui: 'bdd' });
await import('./my-test.js');
mocha.run(() => {
sessionFinished();
});
} catch (error) {
console.error(error);
sessionFailed(error);
}
}
run();
</script>
</body>
</html>
Loading polyfills or libraries
From the HTML page you can load polyfills or libraries to be set up before your tests are run. This is great for testing your code in different environments.
Load polyfills or libraries
<html>
<body>
<script src="./some-polyfill.js"></script>
<script type="module">
import { mocha, sessionFinished } from '@web/test-runner-mocha';
</script>
</body>
</html>
Configuring browser environment
You can use elements in the <head>
to configure different browser environment, such as base path or CSP rules.
Load polyfills or libraries
<html>
<head>
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; img-src https://*; child-src 'none';"
/>
</head>
<body>
<script type="module">
import { mocha, sessionFinished } from '@web/test-runner-mocha';
</script>
</body>
</html>
Configuring mocha options
You can configure mocha options using the testFramework.config
option:
module.exports = {
testFramework: {
config: {
ui: 'bdd',
timeout: '2000',
},
},
};
The config entry accepts any of the official mocha browser options.
Libraries
@open-wc/testing is a general purpose library, including assertions via chai, HTML test fixtures, a11y tests and test helpers.
It is an opinionated implementation which brings together multiple libraries. You could also use the individual libraries together:
For stubbing and mocking, we recommend sinon which ships an es module variant out of the box:
import { stub, useFakeTimers } from 'sinon';