@serenity-js/serenity-bdd
Advanced tools
Comparing version 3.15.1 to 3.16.0
@@ -6,2 +6,20 @@ # Change Log | ||
# [3.16.0](https://github.com/serenity-js/serenity-js/compare/v3.15.1...v3.16.0) (2024-02-01) | ||
### Bug Fixes | ||
* **core:** introduced RequirementsHierarchy to centralise requirements detection logic ([0a3d6f0](https://github.com/serenity-js/serenity-js/commit/0a3d6f013a3b94ca471edc263e1157b7c41131be)) | ||
* **serenity-bdd:** upgraded Serenity BDD CLI to 4.0.46 ([218c08f](https://github.com/serenity-js/serenity-js/commit/218c08ffeef6fc1f51654782d896a03b048dca6d)) | ||
### Features | ||
* **cucumber:** support for nested requirements reporting ([40f8842](https://github.com/serenity-js/serenity-js/commit/40f884273bfac96bde1b028a819d9641e861dc3b)) | ||
* **serenity-bdd:** upgraded Serenity BDD to 4.0.44 ([4e2f1e3](https://github.com/serenity-js/serenity-js/commit/4e2f1e3b273712c44a7f749ba9570f121520cdd5)) | ||
## [3.15.1](https://github.com/serenity-js/serenity-js/compare/v3.15.0...v3.15.1) (2024-01-19) | ||
@@ -8,0 +26,0 @@ |
@@ -28,3 +28,3 @@ "use strict"; | ||
const path = __importStar(require("path")); // eslint-disable-line unicorn/import-style | ||
const SpecDirectory_1 = require("../../stage/crew/serenity-bdd-reporter/SpecDirectory"); | ||
const process = __importStar(require("process")); | ||
const defaults_1 = require("../defaults"); | ||
@@ -51,3 +51,3 @@ const io_2 = require("../io"); | ||
features: { | ||
default: cwd.relative(new SpecDirectory_1.SpecDirectory(new io_1.FileSystem(cwd)).guessLocation()), | ||
default: cwd.relative(new io_1.RequirementsHierarchy(new io_1.FileSystem(cwd)).rootDirectory()), | ||
describe: 'A relative path to the requirements hierarchy root directory, such as "./features" or "./spec"', | ||
@@ -100,5 +100,8 @@ }, | ||
.withProperties(screenplay_1.SystemProperties.of({ | ||
'serenity.compress.filenames': `${argv.shortFilenames}`, | ||
'LOG_LEVEL': argv.log, | ||
'logback.configurationFile': path.resolve(moduleRoot, './resources/logback.config.xml'), | ||
'serenity.compress.filenames': `${argv.shortFilenames}`, | ||
// Serenity BDD requires both --features and this property for FeatureFilePath to work | ||
// see https://github.com/serenity-bdd/serenity-core/blob/a997617f5a43b5d46a3a81da875b8f850a9c21ab/serenity-model/src/main/java/net/thucydides/model/requirements/FeatureFilePath.java#L10 | ||
'serenity.features.directory': argv.features, | ||
})) | ||
@@ -105,0 +108,0 @@ .withArguments(screenplay_1.SerenityBDDArguments.from(argv))); |
@@ -20,3 +20,3 @@ "use strict"; | ||
exports.defaults = { | ||
artifact: 'net.serenity-bdd:serenity-cli:jar:4.0.43', | ||
artifact: 'net.serenity-bdd:serenity-cli:jar:4.0.46', | ||
repository: 'https://repo1.maven.org/maven2/', | ||
@@ -23,0 +23,0 @@ cacheDir: 'node_modules/@serenity-js/serenity-bdd/cache', |
import type { DomainEventQueue } from '@serenity-js/core'; | ||
import type { ActivityRelatedArtifactArchived, ActivityRelatedArtifactGenerated, BusinessRuleDetected, FeatureNarrativeDetected, SceneBackgroundDetected, SceneDescriptionDetected, SceneTagged, TestRunnerDetected } from '@serenity-js/core/lib/events'; | ||
import type { Path } from '@serenity-js/core/lib/io'; | ||
import type { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import type { SerenityBDD4ReportSchema } from '../serenity-bdd-report-schema'; | ||
@@ -10,4 +10,4 @@ import type { SerenityBDDReportContext } from './SerenityBDDReportContext'; | ||
export declare abstract class EventQueueProcessor { | ||
protected readonly specDirectory: Path; | ||
constructor(specDirectory: Path); | ||
protected readonly requirementsHierarchy: RequirementsHierarchy; | ||
constructor(requirementsHierarchy: RequirementsHierarchy); | ||
abstract supports(queue: DomainEventQueue): boolean; | ||
@@ -14,0 +14,0 @@ abstract process(queue: DomainEventQueue): SerenityBDD4ReportSchema; |
@@ -9,5 +9,5 @@ "use strict"; | ||
class EventQueueProcessor { | ||
specDirectory; | ||
constructor(specDirectory) { | ||
this.specDirectory = specDirectory; | ||
requirementsHierarchy; | ||
constructor(requirementsHierarchy) { | ||
this.requirementsHierarchy = requirementsHierarchy; | ||
} | ||
@@ -14,0 +14,0 @@ onFeatureNarrativeDetected(report) { |
import type { DomainEventQueues } from '@serenity-js/core'; | ||
import type { Path } from '@serenity-js/core/lib/io'; | ||
import type { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import type { Artifact, CorrelationId } from '@serenity-js/core/lib/model'; | ||
@@ -11,3 +11,3 @@ import { Name } from '@serenity-js/core/lib/model'; | ||
private readonly sceneSequenceProcessor; | ||
constructor(specDirectory: Path); | ||
constructor(requirementsHierarchy: RequirementsHierarchy); | ||
process(queues: DomainEventQueues): Array<{ | ||
@@ -14,0 +14,0 @@ artifact: Artifact; |
@@ -14,5 +14,5 @@ "use strict"; | ||
sceneSequenceProcessor; | ||
constructor(specDirectory) { | ||
this.singleSceneProcessor = new single_scene_1.SingleSceneEventQueueProcessor(specDirectory); | ||
this.sceneSequenceProcessor = new scene_sequence_1.SceneSequenceEventQueueProcessor(specDirectory); | ||
constructor(requirementsHierarchy) { | ||
this.singleSceneProcessor = new single_scene_1.SingleSceneEventQueueProcessor(requirementsHierarchy); | ||
this.sceneSequenceProcessor = new scene_sequence_1.SceneSequenceEventQueueProcessor(requirementsHierarchy); | ||
} | ||
@@ -19,0 +19,0 @@ // todo: move `name` to Artifact and return Artifact[]... and sceneId? |
@@ -39,3 +39,3 @@ "use strict"; | ||
.when(events_1.SceneFinished, this.onSceneFinished(context)) | ||
.else(() => context), new SceneSequenceReportContext_1.SceneSequenceReportContext(this.specDirectory) // eslint-disable-line @typescript-eslint/indent | ||
.else(() => context), new SceneSequenceReportContext_1.SceneSequenceReportContext(this.requirementsHierarchy) // eslint-disable-line @typescript-eslint/indent | ||
).build(); | ||
@@ -42,0 +42,0 @@ } |
@@ -0,3 +1,3 @@ | ||
import type { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import type { CorrelationId } from '@serenity-js/core/lib/model'; | ||
import type { Path } from '@serenity-js/core/src/io'; | ||
import type { SerenityBDD4ReportSchema } from '../serenity-bdd-report-schema'; | ||
@@ -9,7 +9,7 @@ import type { LinkedTestStep } from './LinkedTestStep'; | ||
export declare abstract class SerenityBDDReportContext { | ||
readonly specDirectory: Path; | ||
readonly requirementsHierarchy: RequirementsHierarchy; | ||
readonly report: Partial<SerenityBDD4ReportSchema>; | ||
readonly steps: Map<string, LinkedTestStep>; | ||
currentActivityId: CorrelationId; | ||
constructor(specDirectory: Path); | ||
constructor(requirementsHierarchy: RequirementsHierarchy); | ||
with(fn: (report: this) => this): this; | ||
@@ -16,0 +16,0 @@ build(): SerenityBDD4ReportSchema; |
@@ -8,8 +8,8 @@ "use strict"; | ||
class SerenityBDDReportContext { | ||
specDirectory; | ||
requirementsHierarchy; | ||
report = {}; | ||
steps = new Map(); | ||
currentActivityId = undefined; | ||
constructor(specDirectory) { | ||
this.specDirectory = specDirectory; | ||
constructor(requirementsHierarchy) { | ||
this.requirementsHierarchy = requirementsHierarchy; | ||
} | ||
@@ -16,0 +16,0 @@ with(fn) { |
@@ -31,3 +31,3 @@ "use strict"; | ||
.when(events_1.SceneFinished, this.onSceneFinished(context)) | ||
.else(() => context), new SingleSceneReportContext_1.SingleSceneReportContext(this.specDirectory) // eslint-disable-line @typescript-eslint/indent | ||
.else(() => context), new SingleSceneReportContext_1.SingleSceneReportContext(this.requirementsHierarchy) // eslint-disable-line @typescript-eslint/indent | ||
).build(); | ||
@@ -34,0 +34,0 @@ } |
@@ -14,3 +14,3 @@ "use strict"; | ||
const storyName = (0, mappers_1.escapeHtml)(category); | ||
const requirementsHierarchy = requirementsHierarchyFromPath(context.specDirectory, details.location.path); | ||
const requirementsHierarchy = context.requirementsHierarchy.hierarchyFor(details.location.path); | ||
const pathElements = requirementsHierarchy.map(name => ({ | ||
@@ -37,15 +37,2 @@ name, | ||
exports.scenarioDetailsOf = scenarioDetailsOf; | ||
function requirementsHierarchyFromPath(specDirectory, path) { | ||
const relative = specDirectory.relative(path); | ||
return relative.split().map((segment, i, segments) => { | ||
if (i < segments.length - 1) { | ||
return segment; | ||
} | ||
// If there is a dot in the file name, extract the substring before it; otherwise, use the entire string | ||
const firstDotIndex = segment.indexOf('.'); | ||
return firstDotIndex === -1 | ||
? segment | ||
: segment.slice(0, firstDotIndex); | ||
}); | ||
} | ||
function humanReadable(name) { | ||
@@ -52,0 +39,0 @@ const result = name |
@@ -21,2 +21,3 @@ "use strict"; | ||
...tagReportFor(tag), | ||
name: join('/', displayNameOfRecorded(model_1.ThemeTag, context.report.tags), tag.name), | ||
displayName: tag.name, | ||
@@ -127,3 +128,3 @@ }; | ||
...tag.toJSON(), | ||
displayName: tag.name.replace(/_+/, ' '), | ||
displayName: tag.name.replaceAll(/_+/g, ' '), | ||
}; | ||
@@ -139,4 +140,6 @@ } | ||
const found = (tags || []).find(t => t.type === typeOfTag.Type); | ||
return found && found.displayName; | ||
return found | ||
? found.displayName | ||
: ''; | ||
} | ||
//# sourceMappingURL=tagOf.js.map |
import type { Stage, StageCrewMember, StageCrewMemberBuilder } from '@serenity-js/core'; | ||
import type { DomainEvent } from '@serenity-js/core/lib/events'; | ||
import { Path } from '@serenity-js/core/lib/io'; | ||
import { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import type { SerenityBDDReporterConfig } from './SerenityBDDReporterConfig'; | ||
@@ -114,3 +114,3 @@ /** | ||
export declare class SerenityBDDReporter implements StageCrewMember { | ||
private readonly specDirectory; | ||
private readonly requirementsHierarchy; | ||
private stage?; | ||
@@ -121,7 +121,7 @@ private readonly eventQueues; | ||
/** | ||
* @param {Path} specDirectory | ||
* @param {Path} requirementsHierarchy | ||
* @param {Stage} [stage] | ||
* The stage this {@apilink StageCrewMember} should be assigned to | ||
*/ | ||
constructor(specDirectory: Path, stage?: Stage); | ||
constructor(requirementsHierarchy: RequirementsHierarchy, stage?: Stage); | ||
/** | ||
@@ -128,0 +128,0 @@ * @inheritDoc |
@@ -10,3 +10,2 @@ "use strict"; | ||
const processors_1 = require("./processors"); | ||
const SpecDirectory_1 = require("./SpecDirectory"); | ||
/** | ||
@@ -121,3 +120,3 @@ * A {@apilink StageCrewMember} that produces [Serenity BDD](http://serenity-bdd.info/)-standard JSON reports | ||
class SerenityBDDReporter { | ||
specDirectory; | ||
requirementsHierarchy; | ||
stage; | ||
@@ -130,10 +129,10 @@ eventQueues = new core_1.DomainEventQueues(); | ||
/** | ||
* @param {Path} specDirectory | ||
* @param {Path} requirementsHierarchy | ||
* @param {Stage} [stage] | ||
* The stage this {@apilink StageCrewMember} should be assigned to | ||
*/ | ||
constructor(specDirectory, stage) { | ||
this.specDirectory = specDirectory; | ||
constructor(requirementsHierarchy, stage) { | ||
this.requirementsHierarchy = requirementsHierarchy; | ||
this.stage = stage; | ||
this.processors = new processors_1.EventQueueProcessors((0, tiny_types_1.ensure)('specDirectory', specDirectory, (0, tiny_types_1.isDefined)())); | ||
this.processors = new processors_1.EventQueueProcessors((0, tiny_types_1.ensure)('requirementsHierarchy', requirementsHierarchy, (0, tiny_types_1.isDefined)())); | ||
} | ||
@@ -183,20 +182,6 @@ /** | ||
(0, tiny_types_1.ensure)('fileSystem', fileSystem, (0, tiny_types_1.isDefined)()); | ||
return new SerenityBDDReporter(this.specDirectoryFrom(fileSystem), stage); | ||
const userDefinedSpecDirectory = this.config.specDirectory && io_1.Path.from(this.config.specDirectory); | ||
return new SerenityBDDReporter(new io_1.RequirementsHierarchy(fileSystem, userDefinedSpecDirectory), stage); | ||
} | ||
specDirectoryFrom(fileSystem) { | ||
return this.config.specDirectory | ||
? this.userDefinedSpecDir(fileSystem, this.config.specDirectory) | ||
: this.guessedSpecDir(fileSystem); | ||
} | ||
userDefinedSpecDir(fileSystem, configuredSpecDirectory) { | ||
const specDirectory = io_1.Path.from(configuredSpecDirectory); | ||
if (!fileSystem.exists(specDirectory)) { | ||
throw new core_1.ConfigurationError(`Configured specDirectory \`${this.config.specDirectory}\` does not exist`); | ||
} | ||
return fileSystem.resolve(specDirectory); | ||
} | ||
guessedSpecDir(fileSystem) { | ||
return new SpecDirectory_1.SpecDirectory(fileSystem).guessLocation(); | ||
} | ||
} | ||
//# sourceMappingURL=SerenityBDDReporter.js.map |
@@ -15,3 +15,4 @@ /** | ||
* - `features` - typically used by [Serenity/JS + Cucumber.js](/handbook/test-runners/cucumber/) projects to store `.feature` files | ||
* - `spec` - typically used by [Serenity/JS + Jasmine](/handbook/test-runners/jasmine/) and [Mocha](/handbook/test-runners/mocha/) projects to store `.spec.js` files | ||
* - `specs` - typically used by [Serenity/JS + Jasmine](/handbook/test-runners/jasmine/) and [Mocha](/handbook/test-runners/mocha/) projects to store `.spec.js` or `.spec.ts` files | ||
* - `spec` - another popular naming convention seen in [Serenity/JS + Jasmine](/handbook/test-runners/jasmine/) and [Mocha](/handbook/test-runners/mocha/) projects | ||
* - `tests` - typically used by [Serenity/JS + Playwright Test](/handbook/test-runners/playwright-test/) projects to store `.spec.ts` files | ||
@@ -18,0 +19,0 @@ * - `test` - typically used by [Serenity/JS + WebdriverIO](/handbook/test-runners/webdriverio/) projects to store `.spec.ts` files |
{ | ||
"name": "@serenity-js/serenity-bdd", | ||
"version": "3.15.1", | ||
"version": "3.16.0", | ||
"description": "Serenity BDD reporter for Serenity/JS", | ||
@@ -49,7 +49,7 @@ "author": { | ||
"dependencies": { | ||
"@serenity-js/assertions": "3.15.1", | ||
"@serenity-js/core": "3.15.1", | ||
"@serenity-js/rest": "3.15.1", | ||
"@serenity-js/assertions": "3.16.0", | ||
"@serenity-js/core": "3.16.0", | ||
"@serenity-js/rest": "3.16.0", | ||
"ansi-regex": "5.0.1", | ||
"axios": "1.6.5", | ||
"axios": "1.6.7", | ||
"chalk": "4.1.2", | ||
@@ -76,3 +76,3 @@ "find-java-home": "2.0.0", | ||
}, | ||
"gitHead": "4df79de3820acd9fb18d76843feb0468c55c8e7f" | ||
"gitHead": "242771e55bd6becc5baeaac03edf945e4cdaf7a4" | ||
} |
import { actorCalled, configure } from '@serenity-js/core'; | ||
import { FileSystem, Path } from '@serenity-js/core/lib/io'; | ||
import { FileSystem, Path, RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import * as path from 'path'; // eslint-disable-line unicorn/import-style | ||
import * as process from 'process'; | ||
import { SpecDirectory } from '../../stage/crew/serenity-bdd-reporter/SpecDirectory'; | ||
import type { Argv } from '../Argv'; | ||
@@ -31,3 +31,3 @@ import { defaults } from '../defaults'; | ||
features: { | ||
default: cwd.relative(new SpecDirectory(new FileSystem(cwd)).guessLocation()), | ||
default: cwd.relative(new RequirementsHierarchy(new FileSystem(cwd)).rootDirectory()), | ||
describe: 'A relative path to the requirements hierarchy root directory, such as "./features" or "./spec"', | ||
@@ -89,5 +89,8 @@ }, | ||
.withProperties(SystemProperties.of({ | ||
'serenity.compress.filenames': `${ argv.shortFilenames }`, | ||
'LOG_LEVEL': argv.log, | ||
'logback.configurationFile': path.resolve(moduleRoot, './resources/logback.config.xml'), | ||
'serenity.compress.filenames': `${ argv.shortFilenames }`, | ||
// Serenity BDD requires both --features and this property for FeatureFilePath to work | ||
// see https://github.com/serenity-bdd/serenity-core/blob/a997617f5a43b5d46a3a81da875b8f850a9c21ab/serenity-model/src/main/java/net/thucydides/model/requirements/FeatureFilePath.java#L10 | ||
'serenity.features.directory': argv.features, | ||
})) | ||
@@ -94,0 +97,0 @@ .withArguments(SerenityBDDArguments.from(argv)), |
@@ -17,3 +17,3 @@ /** | ||
export const defaults = { | ||
artifact: 'net.serenity-bdd:serenity-cli:jar:4.0.43', | ||
artifact: 'net.serenity-bdd:serenity-cli:jar:4.0.46', | ||
repository: 'https://repo1.maven.org/maven2/', | ||
@@ -20,0 +20,0 @@ cacheDir: 'node_modules/@serenity-js/serenity-bdd/cache', |
@@ -12,3 +12,3 @@ import type { DomainEventQueue } from '@serenity-js/core'; | ||
} from '@serenity-js/core/lib/events'; | ||
import type { Path } from '@serenity-js/core/lib/io'; | ||
import type { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
@@ -23,3 +23,3 @@ import type { SerenityBDD4ReportSchema } from '../serenity-bdd-report-schema'; | ||
export abstract class EventQueueProcessor { | ||
constructor(protected readonly specDirectory: Path) { | ||
constructor(protected readonly requirementsHierarchy: RequirementsHierarchy) { | ||
} | ||
@@ -26,0 +26,0 @@ |
import type { DomainEventQueues } from '@serenity-js/core'; | ||
import { SceneStarts } from '@serenity-js/core/lib/events'; | ||
import type { Path } from '@serenity-js/core/lib/io'; | ||
import type { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import type { Artifact, CorrelationId } from '@serenity-js/core/lib/model'; | ||
@@ -21,5 +21,5 @@ import { Name, TestReport } from '@serenity-js/core/lib/model'; | ||
constructor(specDirectory: Path) { | ||
this.singleSceneProcessor = new SingleSceneEventQueueProcessor(specDirectory); | ||
this.sceneSequenceProcessor = new SceneSequenceEventQueueProcessor(specDirectory); | ||
constructor(requirementsHierarchy: RequirementsHierarchy) { | ||
this.singleSceneProcessor = new SingleSceneEventQueueProcessor(requirementsHierarchy); | ||
this.sceneSequenceProcessor = new SceneSequenceEventQueueProcessor(requirementsHierarchy); | ||
} | ||
@@ -26,0 +26,0 @@ |
@@ -62,3 +62,3 @@ import type { DomainEventQueue } from '@serenity-js/core'; | ||
.else(() => context), | ||
new SceneSequenceReportContext(this.specDirectory) // eslint-disable-line @typescript-eslint/indent | ||
new SceneSequenceReportContext(this.requirementsHierarchy) // eslint-disable-line @typescript-eslint/indent | ||
).build(); | ||
@@ -65,0 +65,0 @@ } |
@@ -0,3 +1,3 @@ | ||
import type { RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import type { CorrelationId } from '@serenity-js/core/lib/model'; | ||
import type { Path } from '@serenity-js/core/src/io'; | ||
@@ -16,3 +16,3 @@ import type { SerenityBDD4ReportSchema } from '../serenity-bdd-report-schema'; | ||
constructor(public readonly specDirectory: Path) { | ||
constructor(public readonly requirementsHierarchy: RequirementsHierarchy) { | ||
} | ||
@@ -19,0 +19,0 @@ |
@@ -52,3 +52,3 @@ import type { DomainEventQueue } from '@serenity-js/core'; | ||
.else(() => context), | ||
new SingleSceneReportContext(this.specDirectory) // eslint-disable-line @typescript-eslint/indent | ||
new SingleSceneReportContext(this.requirementsHierarchy) // eslint-disable-line @typescript-eslint/indent | ||
).build(); | ||
@@ -55,0 +55,0 @@ } |
@@ -1,2 +0,1 @@ | ||
import type { Path } from '@serenity-js/core/lib/io'; | ||
import type { ScenarioDetails } from '@serenity-js/core/lib/model'; | ||
@@ -17,3 +16,4 @@ import { ensure, isNotBlank } from 'tiny-types'; | ||
const requirementsHierarchy = requirementsHierarchyFromPath(context.specDirectory, details.location.path); | ||
const requirementsHierarchy = context.requirementsHierarchy.hierarchyFor(details.location.path); | ||
const pathElements = requirementsHierarchy.map(name => ({ | ||
@@ -43,17 +43,2 @@ name, | ||
function requirementsHierarchyFromPath(specDirectory: Path, path: Path): string[] { | ||
const relative = specDirectory.relative(path); | ||
return relative.split().map((segment, i, segments) => { | ||
if (i < segments.length - 1) { | ||
return segment; | ||
} | ||
// If there is a dot in the file name, extract the substring before it; otherwise, use the entire string | ||
const firstDotIndex = segment.indexOf('.'); | ||
return firstDotIndex === -1 | ||
? segment | ||
: segment.slice(0, firstDotIndex); | ||
}); | ||
} | ||
function humanReadable(name: string): string { | ||
@@ -60,0 +45,0 @@ const result = name |
@@ -27,2 +27,3 @@ import type { Tag} from '@serenity-js/core/lib/model'; | ||
...tagReportFor(tag), | ||
name: join('/', displayNameOfRecorded(ThemeTag, context.report.tags), tag.name), | ||
displayName: tag.name, | ||
@@ -167,3 +168,3 @@ }; | ||
...tag.toJSON(), | ||
displayName: tag.name.replace(/_+/, ' '), | ||
displayName: tag.name.replaceAll(/_+/g, ' '), | ||
} | ||
@@ -180,6 +181,8 @@ } | ||
function displayNameOfRecorded(typeOfTag: { Type: string }, tags: serenitybdd.TagSchema[]) { | ||
function displayNameOfRecorded(typeOfTag: { Type: string }, tags: serenitybdd.TagSchema[]): string { | ||
const found = (tags || []).find(t => t.type === typeOfTag.Type); | ||
return found && found.displayName; | ||
return found | ||
? found.displayName | ||
: ''; | ||
} |
import type { Stage, StageCrewMember, StageCrewMemberBuilder, StageCrewMemberBuilderDependencies } from '@serenity-js/core'; | ||
import { ConfigurationError, DomainEventQueues } from '@serenity-js/core'; | ||
import { DomainEventQueues } from '@serenity-js/core'; | ||
import type { DomainEvent } from '@serenity-js/core/lib/events'; | ||
import { ArtifactGenerated, AsyncOperationAttempted, AsyncOperationCompleted, AsyncOperationFailed, TestRunFinishes } from '@serenity-js/core/lib/events'; | ||
import type { FileSystem } from '@serenity-js/core/lib/io'; | ||
import { Path } from '@serenity-js/core/lib/io'; | ||
import { Path, RequirementsHierarchy } from '@serenity-js/core/lib/io'; | ||
import { CorrelationId, Description, Name } from '@serenity-js/core/lib/model'; | ||
@@ -12,3 +11,2 @@ import { ensure, isDefined } from 'tiny-types'; | ||
import type { SerenityBDDReporterConfig } from './SerenityBDDReporterConfig'; | ||
import { SpecDirectory } from './SpecDirectory'; | ||
@@ -132,3 +130,3 @@ /** | ||
/** | ||
* @param {Path} specDirectory | ||
* @param {Path} requirementsHierarchy | ||
* @param {Stage} [stage] | ||
@@ -138,6 +136,6 @@ * The stage this {@apilink StageCrewMember} should be assigned to | ||
constructor( | ||
private readonly specDirectory: Path, | ||
private readonly requirementsHierarchy: RequirementsHierarchy, | ||
private stage?: Stage, | ||
) { | ||
this.processors = new EventQueueProcessors(ensure('specDirectory', specDirectory, isDefined())); | ||
this.processors = new EventQueueProcessors(ensure('requirementsHierarchy', requirementsHierarchy, isDefined())); | ||
} | ||
@@ -213,24 +211,9 @@ | ||
return new SerenityBDDReporter(this.specDirectoryFrom(fileSystem), stage); | ||
} | ||
const userDefinedSpecDirectory: Path | undefined = this.config.specDirectory && Path.from(this.config.specDirectory); | ||
private specDirectoryFrom(fileSystem: FileSystem): Path { | ||
return this.config.specDirectory | ||
? this.userDefinedSpecDir(fileSystem, this.config.specDirectory) | ||
: this.guessedSpecDir(fileSystem); | ||
return new SerenityBDDReporter( | ||
new RequirementsHierarchy(fileSystem, userDefinedSpecDirectory), | ||
stage, | ||
); | ||
} | ||
private userDefinedSpecDir(fileSystem: FileSystem, configuredSpecDirectory: string): Path { | ||
const specDirectory = Path.from(configuredSpecDirectory); | ||
if (! fileSystem.exists(specDirectory)) { | ||
throw new ConfigurationError(`Configured specDirectory \`${ this.config.specDirectory }\` does not exist`); | ||
} | ||
return fileSystem.resolve(specDirectory); | ||
} | ||
private guessedSpecDir(fileSystem: FileSystem): Path { | ||
return new SpecDirectory(fileSystem).guessLocation(); | ||
} | ||
} |
@@ -16,3 +16,4 @@ | ||
* - `features` - typically used by [Serenity/JS + Cucumber.js](/handbook/test-runners/cucumber/) projects to store `.feature` files | ||
* - `spec` - typically used by [Serenity/JS + Jasmine](/handbook/test-runners/jasmine/) and [Mocha](/handbook/test-runners/mocha/) projects to store `.spec.js` files | ||
* - `specs` - typically used by [Serenity/JS + Jasmine](/handbook/test-runners/jasmine/) and [Mocha](/handbook/test-runners/mocha/) projects to store `.spec.js` or `.spec.ts` files | ||
* - `spec` - another popular naming convention seen in [Serenity/JS + Jasmine](/handbook/test-runners/jasmine/) and [Mocha](/handbook/test-runners/mocha/) projects | ||
* - `tests` - typically used by [Serenity/JS + Playwright Test](/handbook/test-runners/playwright-test/) projects to store `.spec.ts` files | ||
@@ -19,0 +20,0 @@ * - `test` - typically used by [Serenity/JS + WebdriverIO](/handbook/test-runners/webdriverio/) projects to store `.spec.ts` files |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
417058
438
6296
+ Added@serenity-js/assertions@3.16.0(transitive)
+ Added@serenity-js/core@3.16.0(transitive)
+ Added@serenity-js/rest@3.16.0(transitive)
+ Addedaxios@1.6.7(transitive)
+ Addedlru-cache@10.2.0(transitive)
- Removed@serenity-js/assertions@3.15.1(transitive)
- Removed@serenity-js/core@3.15.1(transitive)
- Removed@serenity-js/rest@3.15.1(transitive)
- Removedaxios@1.6.5(transitive)
- Removedlru-cache@10.1.0(transitive)
- Removedmoment@2.30.1(transitive)
Updated@serenity-js/core@3.16.0
Updated@serenity-js/rest@3.16.0
Updatedaxios@1.6.7