Socket
Socket
Sign inDemoInstall

@serenity-js/serenity-bdd

Package Overview
Dependencies
Maintainers
1
Versions
292
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@serenity-js/serenity-bdd - npm Package Compare versions

Comparing version 3.15.1 to 3.16.0

18

CHANGELOG.md

@@ -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 @@

9

lib/cli/commands/run.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc