Skip to content

Commit 9c42dbe

Browse files
committed
test correct jest html
1 parent 1099dff commit 9c42dbe

File tree

5 files changed

+9060
-3216
lines changed

5 files changed

+9060
-3216
lines changed

backend/jest.config.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
1-
/** @type {import('ts-jest').JestConfigWithTsJest} **/
21
module.exports = {
32
testEnvironment: "node",
43
transform: {
5-
"^.+.tsx?$": ["@swc/jest", {}],
4+
"^.+\\.tsx?$": ["@swc/jest", {}],
65
},
76
moduleNameMapper: {
87
"^@/(.*)$": "<rootDir>/$1",
98
},
10-
};
9+
reporters: [
10+
'default',
11+
['jest-html-reporter', {
12+
pageTitle: 'Test Report',
13+
outputPath: './test-report.html',
14+
includeFailureMsg: true,
15+
}],
16+
],
17+
testTimeout: 10000, // Set global test timeout to 10 seconds
18+
};

backend/test-report.html

Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
<html><head><meta charset="utf-8"/><title>Test Report</title><style type="text/css">html,
2+
body {
3+
font-family: Arial, Helvetica, sans-serif;
4+
font-size: 1rem;
5+
margin: 0;
6+
padding: 0;
7+
color: #333;
8+
}
9+
body {
10+
padding: 2rem 1rem;
11+
font-size: 0.85rem;
12+
}
13+
.jesthtml-content {
14+
margin: 0 auto;
15+
max-width: 70rem;
16+
}
17+
header {
18+
display: flex;
19+
align-items: center;
20+
}
21+
#title {
22+
margin: 0;
23+
flex-grow: 1;
24+
}
25+
#logo {
26+
height: 4rem;
27+
}
28+
#timestamp {
29+
color: #777;
30+
margin-top: 0.5rem;
31+
}
32+
33+
/** SUMMARY */
34+
#summary {
35+
color: #333;
36+
margin: 2rem 0;
37+
display: flex;
38+
font-family: monospace;
39+
font-size: 1rem;
40+
}
41+
#summary > div {
42+
margin-right: 2rem;
43+
background: #eee;
44+
padding: 1rem;
45+
min-width: 15rem;
46+
}
47+
#summary > div:last-child {
48+
margin-right: 0;
49+
}
50+
@media only screen and (max-width: 720px) {
51+
#summary {
52+
flex-direction: column;
53+
}
54+
#summary > div {
55+
margin-right: 0;
56+
margin-top: 2rem;
57+
}
58+
#summary > div:first-child {
59+
margin-top: 0;
60+
}
61+
}
62+
63+
.summary-total {
64+
font-weight: bold;
65+
margin-bottom: 0.5rem;
66+
}
67+
.summary-passed {
68+
color: #4f8a10;
69+
border-left: 0.4rem solid #4f8a10;
70+
padding-left: 0.5rem;
71+
}
72+
.summary-failed,
73+
.summary-obsolete-snapshots {
74+
color: #d8000c;
75+
border-left: 0.4rem solid #d8000c;
76+
padding-left: 0.5rem;
77+
}
78+
.summary-pending {
79+
color: #9f6000;
80+
border-left: 0.4rem solid #9f6000;
81+
padding-left: 0.5rem;
82+
}
83+
.summary-empty {
84+
color: #999;
85+
border-left: 0.4rem solid #999;
86+
}
87+
88+
.test-result {
89+
padding: 1rem;
90+
margin-bottom: 0.25rem;
91+
}
92+
.test-result:last-child {
93+
border: 0;
94+
}
95+
.test-result.passed {
96+
background-color: #dff2bf;
97+
color: #4f8a10;
98+
}
99+
.test-result.failed {
100+
background-color: #ffbaba;
101+
color: #d8000c;
102+
}
103+
.test-result.pending {
104+
background-color: #ffdf61;
105+
color: #9f6000;
106+
}
107+
108+
.test-info {
109+
display: flex;
110+
justify-content: space-between;
111+
}
112+
.test-suitename {
113+
width: 20%;
114+
text-align: left;
115+
font-weight: bold;
116+
word-break: break-word;
117+
}
118+
.test-title {
119+
width: 40%;
120+
text-align: left;
121+
font-style: italic;
122+
}
123+
.test-status {
124+
width: 20%;
125+
text-align: right;
126+
}
127+
.test-duration {
128+
width: 10%;
129+
text-align: right;
130+
font-size: 0.75rem;
131+
}
132+
133+
.failureMessages {
134+
padding: 0 1rem;
135+
margin-top: 1rem;
136+
border-top: 1px dashed #d8000c;
137+
}
138+
.failureMessages.suiteFailure {
139+
border-top: none;
140+
}
141+
.failureMsg {
142+
white-space: pre-wrap;
143+
white-space: -moz-pre-wrap;
144+
white-space: -pre-wrap;
145+
white-space: -o-pre-wrap;
146+
word-wrap: break-word;
147+
}
148+
149+
.suite-container {
150+
margin-bottom: 2rem;
151+
}
152+
.suite-container > input[type="checkbox"] {
153+
position: absolute;
154+
left: -100vw;
155+
}
156+
.suite-container label {
157+
display: block;
158+
}
159+
.suite-container .suite-tests {
160+
overflow-y: hidden;
161+
height: 0;
162+
}
163+
.suite-container > input[type="checkbox"]:checked ~ .suite-tests {
164+
height: auto;
165+
overflow: visible;
166+
}
167+
.suite-info {
168+
padding: 1rem;
169+
background-color: #eee;
170+
color: #777;
171+
display: flex;
172+
align-items: center;
173+
margin-bottom: 0.25rem;
174+
}
175+
.suite-info:hover {
176+
background-color: #ddd;
177+
cursor: pointer;
178+
}
179+
.suite-info .suite-path {
180+
word-break: break-all;
181+
flex-grow: 1;
182+
font-family: monospace;
183+
font-size: 1rem;
184+
}
185+
.suite-info .suite-time {
186+
margin-left: 0.5rem;
187+
padding: 0.2rem 0.3rem;
188+
font-size: 0.75rem;
189+
}
190+
.suite-info .suite-time.warn {
191+
background-color: #d8000c;
192+
color: #fff;
193+
}
194+
.suite-info:before {
195+
content: "\2303";
196+
display: inline-block;
197+
margin-right: 0.5rem;
198+
transform: rotate(0deg);
199+
}
200+
.suite-container > input[type="checkbox"]:checked ~ label .suite-info:before {
201+
transform: rotate(180deg);
202+
}
203+
204+
/* CONSOLE LOGS */
205+
.suite-consolelog {
206+
margin-bottom: 0.25rem;
207+
padding: 1rem;
208+
background-color: #efefef;
209+
}
210+
.suite-consolelog-header {
211+
font-weight: bold;
212+
}
213+
.suite-consolelog-item {
214+
padding: 0.5rem;
215+
}
216+
.suite-consolelog-item pre {
217+
margin: 0.5rem 0;
218+
white-space: pre-wrap;
219+
white-space: -moz-pre-wrap;
220+
white-space: -pre-wrap;
221+
white-space: -o-pre-wrap;
222+
word-wrap: break-word;
223+
}
224+
.suite-consolelog-item-origin {
225+
color: #777;
226+
font-weight: bold;
227+
}
228+
.suite-consolelog-item-message {
229+
color: #000;
230+
font-size: 1rem;
231+
padding: 0 0.5rem;
232+
}
233+
234+
/* OBSOLETE SNAPSHOTS */
235+
.suite-obsolete-snapshots {
236+
margin-bottom: 0.25rem;
237+
padding: 1rem;
238+
background-color: #ffbaba;
239+
color: #d8000c;
240+
}
241+
.suite-obsolete-snapshots-header {
242+
font-weight: bold;
243+
}
244+
.suite-obsolete-snapshots-item {
245+
padding: 0.5rem;
246+
}
247+
.suite-obsolete-snapshots-item pre {
248+
margin: 0.5rem 0;
249+
white-space: pre-wrap;
250+
white-space: -moz-pre-wrap;
251+
white-space: -pre-wrap;
252+
white-space: -o-pre-wrap;
253+
word-wrap: break-word;
254+
}
255+
.suite-obsolete-snapshots-item-message {
256+
color: #000;
257+
font-size: 1rem;
258+
padding: 0 0.5rem;
259+
}
260+
</style></head><body><div class="jesthtml-content"><header><h1 id="title">Test Report</h1></header><div id="metadata-container"><div id="timestamp">Started: 2024-11-08 10:14:13</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (4)</div><div class="summary-passed ">4 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (19)</div><div class="summary-passed ">19 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><input id="collapsible-0" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-0"><div class="suite-info"><div class="suite-path">C:\Users\Fengren\OneDrive\Documents\NTU\NTUCS\Y2S1\SC2006\SC2006clone\flowmotion\backend\date.test.ts</div><div class="suite-time">1.925s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">formatSGT()</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div></div></div><div id="suite-2" class="suite-container"><input id="collapsible-1" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-1"><div class="suite-info"><div class="suite-path">C:\Users\Fengren\OneDrive\Documents\NTU\NTUCS\Y2S1\SC2006\SC2006clone\flowmotion\backend\fetch.test.ts</div><div class="suite-time">2.464s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CachingFetch</div><div class="test-title">fetch() no cache</div><div class="test-status">passed</div><div class="test-duration">1.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CachingFetch</div><div class="test-title">fetch() cached</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CachingFetch</div><div class="test-title">fetch() no-cache</div><div class="test-status">passed</div><div class="test-duration">0.272s</div></div></div></div></div><div id="suite-3" class="suite-container"><input id="collapsible-2" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-2"><div class="suite-info"><div class="suite-path">C:\Users\Fengren\OneDrive\Documents\NTU\NTUCS\Y2S1\SC2006\SC2006clone\flowmotion\backend\services\routing.test.ts</div><div class="suite-time">4.498s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">RoutingSvc</div><div class="test-title">route() returns routes</div><div class="test-status">passed</div><div class="test-duration">1.27s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RoutingSvc</div><div class="test-title">route() throws NotFoundError on no route</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RoutingSvc</div><div class="test-title">route() throws ValidationError on bad coordinate</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RoutingSvc</div><div class="test-title">geolookup() returns correct GeoLocation for a given postcode</div><div class="test-status">passed</div><div class="test-duration">0.624s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RoutingSvc</div><div class="test-title">geolookup() throws an error for invalid postcode</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-4" class="suite-container"><input id="collapsible-3" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-3"><div class="suite-info"><div class="suite-path">C:\Users\Fengren\OneDrive\Documents\NTU\NTUCS\Y2S1\SC2006\SC2006clone\flowmotion\backend\services\congestion.test.ts</div><div class="suite-time warn">5.417s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">lastUpdatedOn() gets last updated_on date</div><div class="test-status">passed</div><div class="test-duration">1.45s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() gets last updated_on congestions</div><div class="test-status">passed</div><div class="test-duration">0.226s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() filters by begin &amp; end</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() filters by camera_id</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() performs aggregation by hour with max</div><div class="test-status">passed</div><div class="test-duration">0.267s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() performs aggregation by day with avg</div><div class="test-status">passed</div><div class="test-duration">0.23s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() performs aggregation by day with avg with camera_id filter</div><div class="test-status">passed</div><div class="test-duration">0.201s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() performs aggregation by day with min</div><div class="test-status">passed</div><div class="test-duration">0.191s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() throws error when agg is provided without groupby</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CongestionSvc</div><div class="test-title">getCongestions() filters by min_rating</div><div class="test-status">passed</div><div class="test-duration">0.261s</div></div></div></div></div></div></body></html>

0 commit comments

Comments
 (0)