jest-allure
Version:
Allure Reports for jest
91 lines (78 loc) • 2.62 kB
text/typescript
import Allure from "allure-js-commons";
import stripAnsi from "strip-ansi";
import { Reporter } from "./Reporter";
import { relative } from "path";
declare namespace jasmine {
function getEnv(): any;
interface CustomReporter {
jasmineStarted?(suiteInfo: any): void;
suiteStarted?(result: CustomReporterResult): void;
specStarted?(result: CustomReporterResult): void;
specDone?(result: CustomReporterResult): void;
suiteDone?(result: CustomReporterResult): void;
jasmineDone?(runDetails: any): void;
}
interface CustomReporterResult {
description: string;
failedExpectations?: any[];
fullName: string;
id: string;
passedExpectations?: any[];
pendingReason?: string;
status?: string;
}
}
class JasmineAllureReporter implements jasmine.CustomReporter {
private allure: Allure;
constructor(allure: Allure) {
this.allure = allure;
}
suiteStarted(suite?: jasmine.CustomReporterResult) {
if (suite) {
this.allure.startSuite(suite.fullName);
} else {
// case for tests without suite
this.allure.startSuite(relative(process.cwd(), (expect as any).getState().testPath));
}
}
jasmineDone() {
if (this.allure.getCurrentSuite()) {
this.allure.endSuite();
}
};
suiteDone() {
this.allure.endSuite();
};
specStarted(spec: jasmine.CustomReporterResult) {
if (!this.allure.getCurrentSuite()) {
this.suiteStarted();
}
this.allure.startCase(spec.description);
};
specDone(spec: jasmine.CustomReporterResult) {
let error;
if (spec.status === "pending") {
error = { message: spec.pendingReason };
}
if (spec.status === "disabled") {
error = { message: "This test was disabled" };
}
const failure = spec.failedExpectations && spec.failedExpectations.length ? spec.failedExpectations[0] : undefined;
if (failure) {
error = {
message: stripAnsi(failure.message),
stack: stripAnsi(failure.stack)
};
}
this.allure.endCase(spec.status as jest.Status, error);
};
}
export function registerAllureReporter() {
const allure = new Allure();
const reporter = (global as any).reporter = new Reporter(allure);
jasmine.getEnv().addReporter(new JasmineAllureReporter(allure));
}
registerAllureReporter();
declare global {
export const reporter: Reporter;
}