Skip to content

Commit a169b1d

Browse files
authored
Auto run unittests in tests/index.html (#468)
Instead of triggering the tests from the outside, we can always directly start the mocha runner in tests/index.html. The selenium driver now syncs on either globalThis.testResults being there or the test-complete event. This way we should be able to reliably run the tests both via selenium and the browser.
1 parent d87b307 commit a169b1d

File tree

2 files changed

+47
-62
lines changed

2 files changed

+47
-62
lines changed

tests/index.html

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@
99
margin: 8px;
1010
}
1111
</style>
12-
1312
<script src="../node_modules/mocha/mocha.js"></script>
1413
<script src="../node_modules/expect.js/index.js"></script>
1514
<script src="../node_modules/sinon/pkg/sinon.js"></script>
15+
<script src="../resources/benchmark-runner.mjs" type="module"></script>
16+
</head>
17+
18+
<body>
19+
<div id="mocha"></div>
1620
<script type="module">
1721
mocha.setup({
1822
ui: "bdd",
@@ -22,55 +26,44 @@
2226
},
2327
},
2428
});
25-
</script>
26-
</head>
2729

28-
<body>
29-
<div id="mocha"></div>
30-
<script src="../resources/benchmark-runner.mjs" type="module"></script>
31-
<script src="benchmark-runner-tests.mjs" type="module"></script>
32-
<script type="module">
33-
function startTest() {
34-
const runner = mocha.run();
35-
window.mochaResults = runner;
30+
await import("./benchmark-runner-tests.mjs");
3631

37-
function createReport(node) {
38-
const tree = {
39-
tests: [],
40-
suites: [],
41-
id: node.id,
42-
title: node.title,
43-
root: node.root,
44-
};
32+
globalThis.testResults = undefined;
33+
globalThis.testRunner = mocha.run();
4534

46-
for (const test of node.tests) {
47-
tree.tests.push({
48-
id: test.id,
49-
title: test.title,
50-
state: test.state,
51-
error: {
52-
name: test?.err?.name,
53-
message: test?.err?.message,
54-
},
55-
});
56-
}
35+
function createReport(node) {
36+
const tree = {
37+
tests: [],
38+
suites: [],
39+
id: node.id,
40+
title: node.title,
41+
root: node.root,
42+
};
5743

58-
for (const suite of node.suites) {
59-
tree.suites.push(createReport(suite));
60-
}
44+
for (const test of node.tests) {
45+
tree.tests.push({
46+
id: test.id,
47+
title: test.title,
48+
state: test.state,
49+
error: {
50+
name: test?.err?.name,
51+
message: test?.err?.message,
52+
},
53+
});
54+
}
6155

62-
return tree;
56+
for (const suite of node.suites) {
57+
tree.suites.push(createReport(suite));
6358
}
6459

65-
runner.on("end", function () {
66-
window.suite = createReport(runner.suite);
67-
window.dispatchEvent(new Event("test-complete"));
68-
});
60+
return tree;
6961
}
7062

71-
window.addEventListener("start-test", () => startTest(), { once: true });
72-
window.benchmarkReady = true;
73-
window.dispatchEvent(new Event("benchmark-ready"));
63+
globalThis.testRunner.on("end", () => {
64+
globalThis.testResults = createReport(globalThis.testRunner.suite);
65+
globalThis.dispatchEvent(new Event("test-complete"));
66+
});
7467
</script>
7568
</body>
7669
</html>

tests/run.mjs

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -98,32 +98,24 @@ async function test() {
9898
try {
9999
await driver.get(`http://localhost:${PORT}/tests/index.html`);
100100

101-
await driver.executeAsyncScript((callback) => {
102-
if (window.benchmarkReady)
103-
callback();
104-
105-
window.addEventListener("benchmark-ready", () => callback(), { once: true });
106-
});
107-
108-
const result = await driver.executeAsyncScript(function (callback) {
109-
window.addEventListener(
110-
"test-complete",
111-
() =>
112-
callback({
113-
stats: window.mochaResults.stats,
114-
suite: window.suite,
115-
}),
116-
{ once: true }
117-
);
118-
window.dispatchEvent(new Event("start-test"));
101+
const { testResults, stats } = await driver.executeAsyncScript(function (callback) {
102+
const returnResults = () =>
103+
callback({
104+
stats: globalThis.testRunner.stats,
105+
testResults: globalThis.testResults,
106+
});
107+
if (window.testResults)
108+
returnResults();
109+
else
110+
window.addEventListener("test-complete", returnResults, { once: true });
119111
});
120112

121-
printTree(result.suite);
113+
printTree(testResults);
122114

123115
console.log("\nChecking for passed tests...");
124-
assert(result.stats.passes > 0);
116+
assert(stats.passes > 0);
125117
console.log("Checking for failed tests...");
126-
assert(result.stats.failures === 0);
118+
assert(stats.failures === 0);
127119
} finally {
128120
console.log("\nTests complete!");
129121
driver.quit();

0 commit comments

Comments
 (0)