Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
it('ignores events outcomes Protractor doesn\'t care about', () => {
expect(reporter.notifyOf(new SceneFinished(details, new ExecutionSkipped()))).to.be.undefined; // tslint:disable-line:no-unused-expression
expect(reporter.report()).to.deep.equal({
failedCount: 0,
specResults: [],
});
});
it('has been compromised', () => {
// const assertionError = new AssertionError('expected true to equal false', false, true);
const assertionError = new TestCompromisedError('expected true to equal false');
given(reporter).isNotifiedOfFollowingEvents(
new SceneFinished(defaultCardScenario, new ExecutionCompromised(assertionError)),
new TestRunFinished(),
);
report = stageManager.notifyOf.firstCall.lastArg.artifact.map(_ => _);
expect(report.result).to.equal('COMPROMISED');
expect(report.testFailureCause.errorType).to.equal('TestCompromisedError');
expect(report.testFailureCause.message).to.equal('expected true to equal false');
expect(report.testFailureCause.stackTrace).to.be.an('array');
});
),
),
new SceneStarts(scenario1),
new SceneFinished(scenario1, new ExecutionSuccessful()),
new SceneSequenceDetected(sequence),
new SceneTemplateDetected(template),
new SceneParametersDetected(
scenario2,
new ScenarioParameters(
new Name('Serenity/JS contributors'),
new Description(`Some of the people who have contributed their time and talent to the Serenity/JS project`),
{ Developer: 'wakaleo', Twitter_Handle: '@wakaleo' },
),
),
new SceneStarts(scenario2),
new SceneFinished(scenario2, new ExecutionSuccessful()),
new TestRunFinished(),
);
const report: SerenityBDDReport = stageManager.notifyOf.firstCall.lastArg.artifact.map(_ => _);
expect(report.name).to.equal(name.value);
expect(report.dataTable).to.exist; // tslint:disable-line:no-unused-expression
expect(report.dataTable.scenarioOutline).to.equal(template.value);
expect(report.dataTable.headers).to.deep.equal([
'Developer',
'Twitter_Handle',
]);
expect(report.dataTable.dataSetDescriptors).to.deep.equal([{
startRow: 0,
rowCount: 2,
const details = new ScenarioDetails(
new Name(scenario.name),
new Category(scenario.category),
new FileSystemLocation(new Path(scenario.path)),
);
this.serenityInstance.announce(new SceneStarts(
details,
this.serenityInstance.currentTime(),
));
// ... an actual test operunner would now execute the test and then announce the outcome
this.serenityInstance.announce(
new SceneFinished(details, scenario.outcome, this.serenityInstance.currentTime()),
);
return this.serenityInstance.waitForNextCue();
}), Promise.resolve(void 0));
}
it('is marked map automated (non-manual) by default', () => {
given(reporter).isNotifiedOfFollowingEvents(
new SceneFinished(defaultCardScenario, new ExecutionSuccessful()),
new TestRunFinished(),
);
report = stageManager.notifyOf.firstCall.lastArg.artifact.map(_ => _);
expect(report.manual).to.equal(false);
});
it('has been ignored', () => {
given(reporter).isNotifiedOfFollowingEvents(
new SceneFinished(defaultCardScenario, new ExecutionIgnored()),
new TestRunFinished(),
);
report = stageManager.notifyOf.firstCall.lastArg.artifact.map(_ => _);
expect(report.result).to.equal('IGNORED');
});
/**
* Serenity doesn't allow for more than one failure per activity, but Jasmine does.
* If there are multiple failures we wrap them up in fake activities so that they're all reported correctly.
*/
if (result.failedExpectations.length > 1) {
result.failedExpectations.forEach(failedExpectation => {
const details = new ActivityDetails(new Name('Expectation'), CorrelationId.create());
this.emit(
new TaskStarts(details, this.serenity.currentTime()),
new TaskFinished(details, this.failureOutcomeFrom(failedExpectation), this.serenity.currentTime()),
);
});
}
this.emit(new SceneFinished(
this.scenarioDetailsOf(result),
this.outcomeFrom(result),
));
}
it('is separate for each scenario', () => {
given(reporter).isNotifiedOfFollowingEvents(
new SceneStarts(defaultCardScenario),
new SceneFinished(defaultCardScenario, new ExecutionSuccessful()),
new SceneStarts(voucherScenario),
new SceneFinished(voucherScenario, new ExecutionIgnored()),
new TestRunFinished(),
);
expect(stageManager.notifyOf.callCount).to.equal(2);
const
event1: ArtifactGenerated = stageManager.notifyOf.firstCall.lastArg,
event2: ArtifactGenerated = stageManager.notifyOf.secondCall.lastArg;
expect(event1.artifact.map(_ => _).name).to.equal(defaultCardScenario.name.value);
expect(event2.artifact.map(_ => _).name).to.equal(voucherScenario.name.value);
});
});
it('does nothing, even when a problem occurs', ({ outcome }) => {
const { stage, recorder } = create();
const photographer = new Photographer(new TakePhotosOfFailures(), stage);
stage.assign(photographer);
givenFollowingEvents(
new SceneStarts(defaultCardScenario),
new SceneFinished(defaultCardScenario, outcome),
new TestRunFinished(),
).areSentTo(photographer);
return stage.waitForNextCue().then(() => {
expect(recorder.events).to.have.lengthOf(0);
});
});
});
const
pickACard = new ActivityDetails(new Name('Pick a credit card')),
makePayment = new ActivityDetails(new Name('Make a payment'));
given(reporter).isNotifiedOfFollowingEvents(
new SceneStarts(defaultCardScenario),
new TaskStarts(pickACard),
new ArtifactGenerated(new Name('pick a card message'), JSONData.fromJSON({ card: 'default' })),
new ArtifactArchived(new Name('pick a card message'), JSONData, new Path('target/site/serenity/pick-a-card-message-md5hash.json')),
new TaskFinished(pickACard, new ExecutionSuccessful()),
new TaskStarts(makePayment),
new ArtifactGenerated(new Name('make a payment message'), JSONData.fromJSON({ amount: '£42' })),
new ArtifactArchived(new Name('make a payment message'), JSONData, new Path('target/site/serenity/make-a-payment-message-md5hash.json')),
new ArtifactGenerated(new Name('server log'), TextData.fromJSON({ contentType: 'text/plain', data: 'received payment request' })),
new TaskFinished(makePayment, new ExecutionSuccessful()),
new SceneFinished(defaultCardScenario, new ExecutionSuccessful()),
new TestRunFinished(),
);
const report: SerenityBDDReport = stageManager.notifyOf.firstCall.lastArg.artifact.map(_ => _);
expect(report.testSteps).to.have.lengthOf(2);
expect(report.testSteps[0].number).to.equal(1);
expect(report.testSteps[0].reportData[0].title).to.equal('pick a card message');
expect(report.testSteps[0].reportData[0].contents).to.equal('{\n "card": "default"\n}');
expect(report.testSteps[1].number).to.equal(2);
expect(report.testSteps[1].reportData[0].title).to.equal('make a payment message');
expect(report.testSteps[1].reportData[0].contents).to.deep.equal('{\n \"amount\": \"£42\"\n}');
expect(report.testSteps[1].reportData[1].title).to.equal('server log');