@serenity-js/mocha 3.20.0 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/lib/SerenityReporterForMocha.d.ts +2 -1
- package/lib/SerenityReporterForMocha.d.ts.map +1 -1
- package/lib/SerenityReporterForMocha.js +9 -8
- package/lib/SerenityReporterForMocha.js.map +1 -1
- package/lib/mappers/MochaTestMapper.d.ts +5 -2
- package/lib/mappers/MochaTestMapper.d.ts.map +1 -1
- package/lib/mappers/MochaTestMapper.js +5 -1
- package/lib/mappers/MochaTestMapper.js.map +1 -1
- package/package.json +3 -3
- package/src/SerenityReporterForMocha.ts +23 -11
- package/src/mappers/MochaTestMapper.ts +12 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.21.0](https://github.com/serenity-js/serenity-js/compare/v3.20.0...v3.21.0) (2024-03-04)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **mocha:** support for custom tags ([b86f2bb](https://github.com/serenity-js/serenity-js/commit/b86f2bb98305ba2491e7a2728aa38431ea8f716c))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [3.20.0](https://github.com/serenity-js/serenity-js/compare/v3.19.0...v3.20.0) (2024-03-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @serenity-js/mocha
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Serenity } from '@serenity-js/core';
|
|
2
|
-
import type
|
|
2
|
+
import { type RequirementsHierarchy } from '@serenity-js/core/lib/io';
|
|
3
3
|
import type { MochaOptions } from 'mocha';
|
|
4
4
|
import { reporters, Runner } from 'mocha';
|
|
5
5
|
/**
|
|
@@ -15,6 +15,7 @@ export declare class SerenityReporterForMocha extends reporters.Base {
|
|
|
15
15
|
private currentSceneId;
|
|
16
16
|
/**
|
|
17
17
|
* @param {Serenity} serenity
|
|
18
|
+
* @param requirementsHierarchy
|
|
18
19
|
* @param {mocha~Runner} runner
|
|
19
20
|
* @param {mocha~MochaOptions} options
|
|
20
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SerenityReporterForMocha.d.ts","sourceRoot":"","sources":["../src/SerenityReporterForMocha.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAelD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SerenityReporterForMocha.d.ts","sourceRoot":"","sources":["../src/SerenityReporterForMocha.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAelD,OAAO,EAA4B,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAUhG,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAK1C;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,SAAS,CAAC,IAAI;IAiBpD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAhB1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgD;IAE9E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IAEnE,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAA4B;IAElD;;;;;OAKG;gBAEkB,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAC7D,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,YAAY;IA4FnB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAkB1E,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,wBAAwB;IAsChC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,qBAAqB;IA8B7B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,IAAI;CAGf"}
|
|
@@ -20,6 +20,7 @@ class SerenityReporterForMocha extends mocha_1.reporters.Base {
|
|
|
20
20
|
currentSceneId = undefined;
|
|
21
21
|
/**
|
|
22
22
|
* @param {Serenity} serenity
|
|
23
|
+
* @param requirementsHierarchy
|
|
23
24
|
* @param {mocha~Runner} runner
|
|
24
25
|
* @param {mocha~MochaOptions} options
|
|
25
26
|
*/
|
|
@@ -109,19 +110,19 @@ class SerenityReporterForMocha extends mocha_1.reporters.Base {
|
|
|
109
110
|
}
|
|
110
111
|
announceSceneStartsFor(test) {
|
|
111
112
|
this.currentSceneId = this.serenity.assignNewSceneId();
|
|
112
|
-
const
|
|
113
|
-
this.emit(new events_1.SceneStarts(this.currentSceneId,
|
|
114
|
-
.map(tag => new events_1.SceneTagged(this.currentSceneId, tag, this.serenity.currentTime())), new events_1.TestRunnerDetected(this.currentSceneId, new model_1.Name('Mocha'), this.serenity.currentTime()));
|
|
113
|
+
const { scenarioDetails, scenarioTags } = this.testMapper.detailsOf(test);
|
|
114
|
+
this.emit(new events_1.SceneStarts(this.currentSceneId, scenarioDetails, this.serenity.currentTime()), ...this.requirementsHierarchy.requirementTagsFor(scenarioDetails.location.path, scenarioDetails.category.value)
|
|
115
|
+
.map(tag => new events_1.SceneTagged(this.currentSceneId, tag, this.serenity.currentTime())), new events_1.TestRunnerDetected(this.currentSceneId, new model_1.Name('Mocha'), this.serenity.currentTime()), ...scenarioTags.map(tag => new events_1.SceneTagged(this.currentSceneId, tag, this.serenity.currentTime())));
|
|
115
116
|
}
|
|
116
117
|
announceSceneFinishedFor(test, runnable) {
|
|
117
|
-
const
|
|
118
|
+
const { scenarioDetails } = this.testMapper.detailsOf(test), outcome = this.recorder.outcomeOf(test) || this.outcomeMapper.outcomeOf(test);
|
|
118
119
|
this.emit(new events_1.SceneFinishes(this.currentSceneId, this.serenity.currentTime()));
|
|
119
120
|
return this.serenity.waitForNextCue()
|
|
120
121
|
.then(() => {
|
|
121
|
-
this.emit(new events_1.SceneFinished(this.currentSceneId,
|
|
122
|
+
this.emit(new events_1.SceneFinished(this.currentSceneId, scenarioDetails, outcome, this.serenity.currentTime()));
|
|
122
123
|
this.recorder.erase(test);
|
|
123
124
|
}, error => {
|
|
124
|
-
this.emit(new events_1.SceneFinished(this.currentSceneId,
|
|
125
|
+
this.emit(new events_1.SceneFinished(this.currentSceneId, scenarioDetails, new model_1.ExecutionFailedWithError(error), this.serenity.currentTime()));
|
|
125
126
|
this.recorder.erase(test);
|
|
126
127
|
// re-throwing an error here would cause Mocha to halt test suite, which we don't want to do
|
|
127
128
|
// https://github.com/mochajs/mocha/issues/1635
|
|
@@ -129,9 +130,9 @@ class SerenityReporterForMocha extends mocha_1.reporters.Base {
|
|
|
129
130
|
});
|
|
130
131
|
}
|
|
131
132
|
announceSceneSkippedFor(test) {
|
|
132
|
-
const
|
|
133
|
+
const { scenarioDetails } = this.testMapper.detailsOf(test), outcome = this.outcomeMapper.outcomeOf(test);
|
|
133
134
|
this.announceSceneStartsFor(test);
|
|
134
|
-
this.emit(new events_1.SceneFinishes(this.currentSceneId, this.serenity.currentTime()), new events_1.SceneFinished(this.currentSceneId,
|
|
135
|
+
this.emit(new events_1.SceneFinishes(this.currentSceneId, this.serenity.currentTime()), new events_1.SceneFinished(this.currentSceneId, scenarioDetails, outcome, this.serenity.currentTime()));
|
|
135
136
|
}
|
|
136
137
|
announceRetryIfNeeded(test) {
|
|
137
138
|
if (!this.isRetriable(test)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SerenityReporterForMocha.js","sourceRoot":"","sources":["../src/SerenityReporterForMocha.ts"],"names":[],"mappings":";;;AAEA,yDAYsC;
|
|
1
|
+
{"version":3,"file":"SerenityReporterForMocha.js","sourceRoot":"","sources":["../src/SerenityReporterForMocha.ts"],"names":[],"mappings":";;;AAEA,yDAYsC;AACtC,iDAAgG;AAChG,uDAQqC;AAErC,iCAA0C;AAE1C,uCAAgE;AAChE,uDAAoD;AAEpD;;GAEG;AACH,MAAa,wBAAyB,SAAQ,iBAAS,CAAC,IAAI;IAiBnC;IACA;IAhBJ,UAAU,CAAkB;IAC5B,aAAa,GAAuB,IAAI,4BAAkB,EAAE,CAAC;IAE7D,QAAQ,GAAoB,IAAI,iCAAe,EAAE,CAAC;IAE3D,QAAQ,GAAoB,EAAE,CAAC;IAC/B,cAAc,GAAkB,SAAS,CAAC;IAElD;;;;;OAKG;IACH,YACqB,QAAkB,EAClB,qBAA4C,EAC7D,MAAc,EACd,OAAsB;QAEtB,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QALN,aAAQ,GAAR,QAAQ,CAAU;QAClB,0BAAqB,GAArB,qBAAqB,CAAuB;QAM7D,IAAI,CAAC,UAAU,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;QAE1D,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,eAAe,EACtC,GAAG,EAAE;YACD,IAAI,CAAC,IAAI,CACL,IAAI,sBAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CACjD,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,iBAAiB,EACxC,CAAC,KAAY,EAAE,EAAE;YACb,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;gBACtB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;aACtC;QACL,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,eAAe,EACtC,CAAC,KAAY,EAAE,EAAE;YACb,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;gBACtB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;aACxC;QACL,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,gBAAgB,EACvC,CAAC,IAAU,EAAE,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,eAAe,EACtC,CAAC,IAAU,EAAE,EAAE;YACX,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EACtC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CACrC,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,eAAe,EACtC,CAAC,IAAU,EAAE,KAAY,EAAE,EAAE;YACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EACtC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAC5C,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,gBAAgB,EACvC,CAAC,IAAU,EAAE,KAAY,EAAE,EAAE;YACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAClB,CAAC,CAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EACjE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAC5C,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,MAAM,wBAAwB,GAAG,wBAAwB,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE;YAClC,OAAO,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAAU,EAAE,EAAE;YACvC,OAAO,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,mEAAmE;QACnE,MAAM,CAAC,EAAE,CAAC,cAAM,CAAC,SAAS,CAAC,kBAAkB,EACzC,CAAC,IAAU,EAAE,EAAE;YACX,IAAI,CAAE,IAAI,CAAC,EAAE,EAAE;gBACX,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;aACtC;QACL,CAAC,CACJ,CAAC;IACN,CAAC;IAEM,IAAI,CAAC,QAAgB,EAAE,QAAqC;QAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;aACzB,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAe,CAAC,IAAI,2BAAmB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACvF,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,CAAC,EAAE;YACX,MAAM,gBAAgB,GAAG,QAAQ,KAAK,CAAC;gBACnC,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,QAAQ,CAAC;YAEf,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAe,CAAC,IAAI,gCAAwB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACjG,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAA;IACV,CAAC;IAEO,sBAAsB,CAAC,KAAY;QACvC,MAAM,OAAO,GAAG,qBAAa,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,OAAO,GAAG,IAAI,wBAAgB,CAChC,IAAI,YAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACrB,oEAAoE;QACpE,IAAI,uBAAkB,CAAC,SAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,EAAE,sEAAsE;QACtH,OAAO,CACV,CAAC;QAEF,IAAI,CAAC,IAAI,CACL,IAAI,wBAAe,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAC5D,CAAC;IACN,CAAC;IAEO,wBAAwB,CAAC,KAAY;QACzC,MAAM,OAAO,GAAG,IAAI,wBAAgB,CAChC,IAAI,YAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACrB,oEAAoE;QACpE,IAAI,uBAAkB,CAAC,SAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,EAAE,sEAAsE;QACtH,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CACtB,CAAC;QAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACpC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CACtE,CAAC;QAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CACpB,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;YAC3B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,EACpB,IAAI,2BAAmB,EAAE,CAC5B,CAAC;QAEF,IAAI,CAAC,IAAI,CACL,IAAI,0BAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAC5E,CAAC;IACN,CAAC;IAEO,sBAAsB,CAAC,IAAU;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;QAEtD,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE1E,IAAI,CAAC,IAAI,CACL,IAAI,oBAAW,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAElF,GAAI,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;aAC3G,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,oBAAW,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAEvF,IAAI,2BAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,YAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAE3F,GAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,oBAAW,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CACtG,CAAC;IACN,CAAC;IAEO,wBAAwB,CAAC,IAAU,EAAE,QAAkB;QAC3D,MACI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EACrD,OAAO,GAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtF,IAAI,CAAC,IAAI,CACL,IAAI,sBAAa,CACb,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,CACJ,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;aAChC,IAAI,CAAC,GAAG,EAAE;YACP,IAAI,CAAC,IAAI,CAAC,IAAI,sBAAa,CACvB,IAAI,CAAC,cAAc,EACnB,eAAe,EACf,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,EAAE,KAAK,CAAC,EAAE;YACP,IAAI,CAAC,IAAI,CAAC,IAAI,sBAAa,CACvB,IAAI,CAAC,cAAc,EACnB,eAAe,EACf,IAAI,gCAAwB,CAAC,KAAK,CAAC,EACnC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE1B,4FAA4F;YAC5F,+CAA+C;YAC9C,QAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,uBAAuB,CAAC,IAAU;QACtC,MACI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EACrD,OAAO,GAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CACL,IAAI,sBAAa,CACb,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,EACD,IAAI,sBAAa,CACb,IAAI,CAAC,cAAc,EACnB,eAAe,EACf,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,CACJ,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,IAAU;QACpC,IAAI,CAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,OAAO,KAAK,CAAC,CAAC;SACjB;QAED,6CAA6C;QAE7C,IAAI,CAAC,IAAI,CACL,IAAI,+BAAsB,CACtB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,EACD,IAAI,oBAAW,CACX,IAAI,CAAC,cAAc,EACnB,IAAI,oBAAY,CAAC,SAAS,CAAC,EAAS,qCAAqC;QACzE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,CACJ,CAAC;QAEF,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,IAAI,CACL,IAAI,oBAAW,CACX,IAAI,CAAC,cAAc,EACnB,IAAI,2BAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAClD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAC9B,CACJ,CAAC;SACL;IACL,CAAC;IAEO,WAAW,CAAC,IAAU;QAC1B,OAAQ,IAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAEO,cAAc,CAAC,IAAU;QAC7B,OAAQ,IAAY,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;IAEO,IAAI,CAAC,GAAG,MAAqB;QACjC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ;AAhSD,4DAgSC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Path } from '@serenity-js/core/lib/io';
|
|
2
|
-
import { ScenarioDetails } from '@serenity-js/core/lib/model';
|
|
2
|
+
import { ScenarioDetails, type Tag } from '@serenity-js/core/lib/model';
|
|
3
3
|
import type { Suite, Test } from 'mocha';
|
|
4
4
|
/**
|
|
5
5
|
* @package
|
|
@@ -7,7 +7,10 @@ import type { Suite, Test } from 'mocha';
|
|
|
7
7
|
export declare class MochaTestMapper {
|
|
8
8
|
private readonly cwd;
|
|
9
9
|
constructor(cwd: Path);
|
|
10
|
-
detailsOf(test: Test):
|
|
10
|
+
detailsOf(test: Test): {
|
|
11
|
+
scenarioDetails: ScenarioDetails;
|
|
12
|
+
scenarioTags: Tag[];
|
|
13
|
+
};
|
|
11
14
|
featureNameFor(scenario: Test | Suite): string;
|
|
12
15
|
private fullNameOf;
|
|
13
16
|
private nameOf;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MochaTestMapper.d.ts","sourceRoot":"","sources":["../../src/mappers/MochaTestMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAkB,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"MochaTestMapper.d.ts","sourceRoot":"","sources":["../../src/mappers/MochaTestMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAkB,eAAe,EAAE,KAAK,GAAG,EAAQ,MAAM,6BAA6B,CAAC;AAC9F,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAEzC;;GAEG;AACH,qBAAa,eAAe;IACZ,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,IAAI;IAG/B,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG;QAAE,eAAe,EAAE,eAAe,CAAC;QAAC,YAAY,EAAE,GAAG,EAAE,CAAA;KAAE;IAmChF,cAAc,CAAC,QAAQ,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM;IAQrD,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,MAAM;CAKjB"}
|
|
@@ -27,10 +27,14 @@ class MochaTestMapper {
|
|
|
27
27
|
const path = new io_1.Path(fileOf(test));
|
|
28
28
|
const scenarioName = this.nameOf(test);
|
|
29
29
|
const title = this.fullNameOf(test);
|
|
30
|
+
const name = scenarioName || title;
|
|
30
31
|
const featureName = scenarioName
|
|
31
32
|
? this.featureNameFor(test)
|
|
32
33
|
: this.cwd.relative(path).value;
|
|
33
|
-
return
|
|
34
|
+
return {
|
|
35
|
+
scenarioDetails: new model_1.ScenarioDetails(new model_1.Name(model_1.Tags.stripFrom(name)), new model_1.Category(model_1.Tags.stripFrom(featureName)), new io_1.FileSystemLocation(path)),
|
|
36
|
+
scenarioTags: model_1.Tags.from(`${featureName} ${name}`),
|
|
37
|
+
};
|
|
34
38
|
}
|
|
35
39
|
featureNameFor(scenario) {
|
|
36
40
|
const parentTitle = scenario?.parent?.title;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MochaTestMapper.js","sourceRoot":"","sources":["../../src/mappers/MochaTestMapper.ts"],"names":[],"mappings":";;;AAAA,iDAAoE;AACpE,
|
|
1
|
+
{"version":3,"file":"MochaTestMapper.js","sourceRoot":"","sources":["../../src/mappers/MochaTestMapper.ts"],"names":[],"mappings":";;;AAAA,iDAAoE;AACpE,uDAA8F;AAG9F;;GAEG;AACH,MAAa,eAAe;IACK;IAA7B,YAA6B,GAAS;QAAT,QAAG,GAAH,GAAG,CAAM;IACtC,CAAC;IAEM,SAAS,CAAC,IAAU;QAEvB,SAAS,MAAM,CAAC,CAAC;YACb,QAAQ,IAAI,EAAE;gBACV,KAAK,CAAC,CAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI;oBAC9D,OAAO,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;gBAClC,KAAK,CAAC,CAAE,CAAC,CAAC,IAAI;oBACV,OAAO,CAAC,CAAC,IAAI,CAAC;gBAClB,KAAK,CAAC,CAAE,CAAC,CAAC,MAAM;oBACZ,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5B;oBACI,MAAM,IAAI,KAAK,CAAC,8BAA+B,CAAE,EAAE,CAAC,CAAC;aAC5D;QACL,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,SAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEpC,MAAM,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC;QAEnC,MAAM,WAAW,GAAG,YAAY;YAC5B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QAEpC,OAAO;YACH,eAAe,EAAE,IAAI,uBAAe,CAChC,IAAI,YAAI,CAAC,YAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAC9B,IAAI,gBAAQ,CAAC,YAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EACzC,IAAI,uBAAkB,CAAC,IAAI,CAAC,CAC/B;YACD,YAAY,EAAE,YAAI,CAAC,IAAI,CAAC,GAAI,WAAY,IAAK,IAAK,EAAE,CAAC;SACxD,CAAC;IACN,CAAC;IAEM,cAAc,CAAC,QAAsB;QACxC,MAAM,WAAW,GAAG,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;QAE5C,OAAO,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;YACzD,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,UAAU,CAAC,QAAsB;QACrC,OAAO,QAAQ,CAAC,MAAM;YAClB,CAAC,CAAC,GAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAE,IAAK,QAAQ,CAAC,KAAM,EAAE,CAAC,IAAI,EAAE;YACpE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,QAAsB;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;aAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;aAC3C,IAAI,EAAE,CAAC;IAChB,CAAC;CACJ;AA1DD,0CA0DC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serenity-js/mocha",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.21.0",
|
|
4
4
|
"description": "Serenity/JS adapter for Mocha",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"node": "^16.13 || ^18.12 || ^20"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@serenity-js/core": "3.
|
|
47
|
+
"@serenity-js/core": "3.21.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"mocha": "^10.3.0"
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"ts-node": "10.9.2",
|
|
60
60
|
"typescript": "5.2.2"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "98621d99c073223dc40cc3dc836c4e2ee676aa9c"
|
|
63
63
|
}
|
|
@@ -13,9 +13,16 @@ import {
|
|
|
13
13
|
TestSuiteFinished,
|
|
14
14
|
TestSuiteStarts,
|
|
15
15
|
} from '@serenity-js/core/lib/events';
|
|
16
|
-
import type
|
|
17
|
-
import {
|
|
18
|
-
|
|
16
|
+
import { FileSystemLocation, Path, type RequirementsHierarchy } from '@serenity-js/core/lib/io';
|
|
17
|
+
import {
|
|
18
|
+
ArbitraryTag,
|
|
19
|
+
CorrelationId,
|
|
20
|
+
ExecutionFailedWithError,
|
|
21
|
+
ExecutionRetriedTag,
|
|
22
|
+
ExecutionSuccessful,
|
|
23
|
+
Name,
|
|
24
|
+
TestSuiteDetails
|
|
25
|
+
} from '@serenity-js/core/lib/model';
|
|
19
26
|
import type { MochaOptions, Runnable, Suite, Test } from 'mocha';
|
|
20
27
|
import { reporters, Runner } from 'mocha';
|
|
21
28
|
|
|
@@ -37,6 +44,7 @@ export class SerenityReporterForMocha extends reporters.Base {
|
|
|
37
44
|
|
|
38
45
|
/**
|
|
39
46
|
* @param {Serenity} serenity
|
|
47
|
+
* @param requirementsHierarchy
|
|
40
48
|
* @param {mocha~Runner} runner
|
|
41
49
|
* @param {mocha~MochaOptions} options
|
|
42
50
|
*/
|
|
@@ -198,19 +206,23 @@ export class SerenityReporterForMocha extends reporters.Base {
|
|
|
198
206
|
private announceSceneStartsFor(test: Test): void {
|
|
199
207
|
this.currentSceneId = this.serenity.assignNewSceneId()
|
|
200
208
|
|
|
201
|
-
const
|
|
209
|
+
const { scenarioDetails, scenarioTags } = this.testMapper.detailsOf(test);
|
|
202
210
|
|
|
203
211
|
this.emit(
|
|
204
|
-
new SceneStarts(this.currentSceneId,
|
|
205
|
-
|
|
212
|
+
new SceneStarts(this.currentSceneId, scenarioDetails, this.serenity.currentTime()),
|
|
213
|
+
|
|
214
|
+
... this.requirementsHierarchy.requirementTagsFor(scenarioDetails.location.path, scenarioDetails.category.value)
|
|
206
215
|
.map(tag => new SceneTagged(this.currentSceneId, tag, this.serenity.currentTime())),
|
|
216
|
+
|
|
207
217
|
new TestRunnerDetected(this.currentSceneId, new Name('Mocha'), this.serenity.currentTime()),
|
|
218
|
+
|
|
219
|
+
... scenarioTags.map(tag => new SceneTagged(this.currentSceneId, tag, this.serenity.currentTime())),
|
|
208
220
|
);
|
|
209
221
|
}
|
|
210
222
|
|
|
211
223
|
private announceSceneFinishedFor(test: Test, runnable: Runnable): Promise<void> {
|
|
212
224
|
const
|
|
213
|
-
|
|
225
|
+
{ scenarioDetails } = this.testMapper.detailsOf(test),
|
|
214
226
|
outcome = this.recorder.outcomeOf(test) || this.outcomeMapper.outcomeOf(test);
|
|
215
227
|
|
|
216
228
|
this.emit(
|
|
@@ -224,7 +236,7 @@ export class SerenityReporterForMocha extends reporters.Base {
|
|
|
224
236
|
.then(() => {
|
|
225
237
|
this.emit(new SceneFinished(
|
|
226
238
|
this.currentSceneId,
|
|
227
|
-
|
|
239
|
+
scenarioDetails,
|
|
228
240
|
outcome,
|
|
229
241
|
this.serenity.currentTime(),
|
|
230
242
|
));
|
|
@@ -233,7 +245,7 @@ export class SerenityReporterForMocha extends reporters.Base {
|
|
|
233
245
|
}, error => {
|
|
234
246
|
this.emit(new SceneFinished(
|
|
235
247
|
this.currentSceneId,
|
|
236
|
-
|
|
248
|
+
scenarioDetails,
|
|
237
249
|
new ExecutionFailedWithError(error),
|
|
238
250
|
this.serenity.currentTime(),
|
|
239
251
|
));
|
|
@@ -248,7 +260,7 @@ export class SerenityReporterForMocha extends reporters.Base {
|
|
|
248
260
|
|
|
249
261
|
private announceSceneSkippedFor(test: Test): void {
|
|
250
262
|
const
|
|
251
|
-
|
|
263
|
+
{ scenarioDetails } = this.testMapper.detailsOf(test),
|
|
252
264
|
outcome = this.outcomeMapper.outcomeOf(test);
|
|
253
265
|
|
|
254
266
|
this.announceSceneStartsFor(test);
|
|
@@ -260,7 +272,7 @@ export class SerenityReporterForMocha extends reporters.Base {
|
|
|
260
272
|
),
|
|
261
273
|
new SceneFinished(
|
|
262
274
|
this.currentSceneId,
|
|
263
|
-
|
|
275
|
+
scenarioDetails,
|
|
264
276
|
outcome,
|
|
265
277
|
this.serenity.currentTime(),
|
|
266
278
|
)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FileSystemLocation, Path } from '@serenity-js/core/lib/io';
|
|
2
|
-
import { Category, Name, ScenarioDetails } from '@serenity-js/core/lib/model';
|
|
2
|
+
import { Category, Name, ScenarioDetails, type Tag, Tags } from '@serenity-js/core/lib/model';
|
|
3
3
|
import type { Suite, Test } from 'mocha';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,7 +9,7 @@ export class MochaTestMapper {
|
|
|
9
9
|
constructor(private readonly cwd: Path) {
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
public detailsOf(test: Test): ScenarioDetails {
|
|
12
|
+
public detailsOf(test: Test): { scenarioDetails: ScenarioDetails, scenarioTags: Tag[] } {
|
|
13
13
|
|
|
14
14
|
function fileOf(t) {
|
|
15
15
|
switch (true) {
|
|
@@ -28,15 +28,20 @@ export class MochaTestMapper {
|
|
|
28
28
|
const scenarioName = this.nameOf(test);
|
|
29
29
|
const title = this.fullNameOf(test);
|
|
30
30
|
|
|
31
|
+
const name = scenarioName || title;
|
|
32
|
+
|
|
31
33
|
const featureName = scenarioName
|
|
32
34
|
? this.featureNameFor(test)
|
|
33
35
|
: this.cwd.relative(path).value;
|
|
34
36
|
|
|
35
|
-
return
|
|
36
|
-
new
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
return {
|
|
38
|
+
scenarioDetails: new ScenarioDetails(
|
|
39
|
+
new Name(Tags.stripFrom(name)),
|
|
40
|
+
new Category(Tags.stripFrom(featureName)),
|
|
41
|
+
new FileSystemLocation(path),
|
|
42
|
+
),
|
|
43
|
+
scenarioTags: Tags.from(`${ featureName } ${ name }`),
|
|
44
|
+
};
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
public featureNameFor(scenario: Test | Suite): string {
|