Skip to content

Commit 040299d

Browse files
author
Chohee Kim
committed
Add skipped tests number in test module metadata and update readme
1 parent 73fb045 commit 040299d

File tree

5 files changed

+81
-10
lines changed

5 files changed

+81
-10
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ It creates a json file, `module-metadata-<timestamp>.json`, which contains an ar
157157
"total": "Total number of tests in the module",
158158
"passed": "A number of passed tests in the module",
159159
"failed": "A number of failed tests in the module",
160+
"skipped": "A number of skipped tests in the module",
160161
"duration": "ms in Total duration to execute the module",
161162
"failedTests": "A list of failed tests"
162163
}
@@ -169,8 +170,9 @@ and it looks something like below:
169170
{
170171
"moduleName": "Slowest-module",
171172
"total": 12,
172-
"passed": 11,
173+
"passed": 9,
173174
"failed": 1,
175+
"skipped": 2,
174176
"duration": 153,
175177
"failedTests": ["failed-test-1"]
176178
},
@@ -179,6 +181,7 @@ and it looks something like below:
179181
"total": 2,
180182
"passed": 1,
181183
"failed": 0,
184+
"skipped": 0,
182185
"duration": 123,
183186
"failedTests": []
184187
}

lib/commands/exam.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,9 @@ module.exports = TestCommand.extend({
386386
{
387387
moduleName: details.module,
388388
testName: details.name,
389+
passed: details.passed == details.total,
389390
failed: (details.failed > 0),
391+
skipped: details.skipped,
390392
duration: details.runtime
391393
}
392394
)

lib/utils/execution-state-manager.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,14 +188,15 @@ class ExecutionStateManager {
188188
* @param {number} duration - duration to execute tests in module in ms
189189
* @param {Array<string>} failedTests - A list of failed test names
190190
*/
191-
_injectModuleMetadata(moduleName, total, passed, failed, duration, failedTests) {
191+
_injectModuleMetadata(moduleName, total, passed, failed, skipped, duration, failedTests) {
192192
this._moduleMetadata.set(
193193
moduleName,
194194
{
195195
moduleName,
196196
total,
197197
passed,
198198
failed,
199+
skipped,
199200
duration,
200201
failedTests
201202
}
@@ -209,20 +210,22 @@ class ExecutionStateManager {
209210
*/
210211
addToModuleMetadata(metadata) {
211212
if (!this._moduleMetadata.has(metadata.moduleName)) {
212-
this._injectModuleMetadata(metadata.moduleName, 0, 0, 0, 0, []);
213+
// modulename, total, passed, failed, skipped, duration, failed tests
214+
this._injectModuleMetadata(metadata.moduleName, 0, 0, 0, 0, 0, []);
213215
}
214216

215217
const curModuleMetadata = this._moduleMetadata.get(metadata.moduleName);
216218

217-
if (metadata.failed) {
219+
if (!metadata.skipped && metadata.failed) {
218220
curModuleMetadata.failedTests.push(metadata.testName);
219221
}
220222

221223
this._injectModuleMetadata(
222224
metadata.moduleName,
223225
curModuleMetadata.total + 1,
224-
( metadata.failed ? curModuleMetadata.passed : curModuleMetadata.passed + 1),
225-
( metadata.failed ? curModuleMetadata.failed + 1 : curModuleMetadata.failed),
226+
( !metadata.skipped && metadata.passed ? curModuleMetadata.passed + 1 : curModuleMetadata.passed ),
227+
( !metadata.skipped && metadata.failed ? curModuleMetadata.failed + 1 : curModuleMetadata.failed ),
228+
( metadata.skipped ? curModuleMetadata.skipped + 1 : curModuleMetadata.skipped ),
226229
curModuleMetadata.duration + metadata.duration,
227230
curModuleMetadata.failedTests
228231
);

node-tests/unit/utils/execution-state-manager-test.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,10 @@ describe('ExecutionStateManager', function() {
112112
const moduleMetadata = {
113113
moduleName: testModuleName,
114114
testName: 'testing foo',
115+
passed: 1,
115116
failed: 0,
117+
skipped: false,
118+
total: 1,
116119
duration: 1
117120
};
118121

@@ -130,6 +133,10 @@ describe('ExecutionStateManager', function() {
130133
fooModuleMetadata.failed,
131134
0
132135
);
136+
assert.equal(
137+
fooModuleMetadata.skipped,
138+
0
139+
);
133140
assert.equal(
134141
fooModuleMetadata.duration,
135142
1
@@ -145,14 +152,20 @@ describe('ExecutionStateManager', function() {
145152
const fooTestMetadata = {
146153
moduleName: fooTestModule,
147154
testName: 'testing foo',
155+
passed: 1,
148156
failed: 0,
157+
skipped: false,
158+
total: 1,
149159
duration: 1
150160
};
151161

152162
const barTestMetadata = {
153163
moduleName: fooTestModule,
154164
testName: 'testing bar',
165+
passed: 0,
155166
failed: 1,
167+
skipped: false,
168+
total: 1,
156169
duration: 1.8
157170
};
158171

@@ -175,6 +188,10 @@ describe('ExecutionStateManager', function() {
175188
fooModuleMetadata.failed,
176189
1
177190
);
191+
assert.equal(
192+
fooModuleMetadata.skipped,
193+
0
194+
);
178195
assert.equal(
179196
fooModuleMetadata.duration,
180197
2.8

node-tests/unit/utils/testem-events-test.js

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ describe('TestemEvents', function() {
223223
});
224224

225225
it('should write module-run-details file and cleanup state when completedBrowsers equals browserCount, load-balance is true, and write-execution-file is false', function() {
226-
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test', failed: false, duration: 1});
226+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test', passed: true, failed: false, skipped: false, duration: 1});
227227
this.testemEvents.completedBrowsersHandler(
228228
1,
229229
1,
@@ -245,16 +245,17 @@ describe('TestemEvents', function() {
245245
total: 1,
246246
passed: 1,
247247
failed: 0,
248+
skipped: 0,
248249
duration: 1,
249250
failedTests: []
250251
}
251252
]);
252253
});
253254

254255
it('should write module-run-details file with sorted by duration', function() {
255-
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test 1', failed: false, duration: 1});
256-
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test 2', failed: true, duration: 8});
257-
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'b', testName: 'test 1', failed: false, duration: 1});
256+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test 1', passed: true, failed: false, skipped: false, duration: 1});
257+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test 2', passed: false, failed: true, skipped: false, duration: 8});
258+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'b', testName: 'test 1', passed: true, failed: false, skipped: false, duration: 1});
258259

259260

260261
this.testemEvents.completedBrowsersHandler(
@@ -278,6 +279,7 @@ describe('TestemEvents', function() {
278279
total: 2,
279280
passed: 1,
280281
failed: 1,
282+
skipped: 0,
281283
duration: 9,
282284
failedTests: ['test 2']
283285
},
@@ -286,12 +288,56 @@ describe('TestemEvents', function() {
286288
total: 1,
287289
passed: 1,
288290
failed: 0,
291+
skipped: 0,
289292
duration: 1,
290293
failedTests: []
291294
}
292295
]);
293296
});
294297

298+
it('should add skipped test number to write module-run-details file with sorted by duration', function() {
299+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test 1', passed: true, failed: false, skipped: true, duration: 0});
300+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'a', testName: 'test 2', passed: false, failed: true, skipped: false, duration: 8});
301+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'b', testName: 'test 1', passed: true, failed: false, skipped: false, duration: 1});
302+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'b', testName: 'test 1', passed: true, failed: false, skipped: false, duration: 0});
303+
this.testemEvents.stateManager.addToModuleMetadata({ moduleName: 'b', testName: 'test 1', paseed: true, failed: false, skipped: true, duration: 1});
304+
305+
this.testemEvents.completedBrowsersHandler(
306+
1,
307+
1,
308+
mockUi,
309+
new Map([
310+
['loadBalance', true],
311+
['writeModuleMetadataFile', true]
312+
]),
313+
'0000'
314+
);
315+
316+
const actual = fs.readFileSync(
317+
path.join(fixtureDir, 'module-metadata-0000.json')
318+
);
319+
320+
assert.deepEqual(JSON.parse(actual), [
321+
{
322+
moduleName: 'a',
323+
total: 2,
324+
passed: 0,
325+
failed: 1,
326+
skipped: 1,
327+
duration: 8,
328+
failedTests: ['test 2']
329+
},
330+
{
331+
moduleName: 'b',
332+
total: 3,
333+
passed: 2,
334+
failed: 0,
335+
skipped: 1,
336+
duration: 2,
337+
failedTests: []
338+
}
339+
]);
340+
});
295341

296342
it('should increment completedBrowsers when load-balance is false', function() {
297343
this.testemEvents.completedBrowsersHandler(

0 commit comments

Comments
 (0)