jasmine-allure-reporter, jest-allure, and mocha-allure-reporter are integration packages that connect JavaScript test runners (Jasmine, Jest, and Mocha, respectively) to the Allure test reporting framework. Allure generates rich, interactive HTML reports that visualize test execution timelines, group tests by features or epics, display attachments (like screenshots or logs), and provide detailed failure analysis. These reporters translate test events and metadata from their respective test frameworks into Allure's internal data model, enabling developers to produce standardized, professional-grade test reports regardless of their underlying test runner.
Allure is a flexible, open-source test reporting framework that generates rich, interactive test reports with detailed timelines, attachments, steps, and failure analysis. In the JavaScript ecosystem, integrating Allure into your testing workflow requires a reporter plugin specific to your test runner. The three main options — jasmine-allure-reporter, jest-allure, and mocha-allure-reporter — each bridge their respective test frameworks to Allure’s data model. However, they differ significantly in architecture, feature support, and maintenance status. Let’s break down how they work and which one fits your stack.
Before diving into features, it’s critical to note that jasmine-allure-reporter is officially deprecated. According to its npm page, the package is no longer maintained and users are encouraged to migrate to alternatives. This alone disqualifies it for new projects.
// DO NOT use this in new projects
const JasmineAllureReporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(new JasmineAllureReporter());
In contrast, both jest-allure and mocha-allure-reporter are actively maintained and compatible with recent versions of their respective test runners.
jasmine-allure-reporter (Deprecated)This reporter attaches directly to Jasmine’s global environment via jasmine.getEnv().addReporter(). It listens to Jasmine’s lifecycle events (suiteStarted, specStarted, etc.) and translates them into Allure results.
// jasmine-allure-reporter (deprecated)
const reporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(reporter);
It supports basic Allure features like test descriptions and severity labels via custom matchers or metadata, but lacks modern capabilities like step nesting or attachments.
jest-allurejest-allure integrates as a Jest environment or reporter, depending on usage. The recommended approach uses the AllureEnvironment to wrap test execution and expose an allure object globally.
// jest.config.js
module.exports = {
testEnvironment: 'node',
setupFilesAfterEnv: ['jest-allure/dist/setup'],
};
// In your test file
allure.description('Verifies user login flow');
allure.label('severity', 'critical');
test('logs in successfully', () => {
// ...
});
This gives you direct access to the Allure API inside tests, enabling fine-grained control over test metadata, steps, and attachments.
mocha-allure-reporterThis reporter plugs into Mocha via the --reporter CLI flag or programmatically through Mocha’s reporter() method. It captures Mocha’s test events and maps them to Allure’s model.
// Via CLI
mocha --reporter mocha-allure-reporter test/*.js
// Programmatically
const Mocha = require('mocha');
const mocha = new Mocha();
mocha.reporter('mocha-allure-reporter');
It also provides a global allure object during test execution, similar to jest-allure, allowing manual enrichment of test cases.
// In a Mocha test
it('should create a user', function() {
allure.feature('User Management');
allure.step('Send POST request', () => {
// ...
});
});
All three packages aim to support core Allure concepts, but implementation depth varies.
jasmine-allure-reporter: No native step support. You must manually manage step-like behavior using nested describe blocks, which doesn’t translate to Allure steps.
jest-allure: Full step support via allure.step():
allure.step('Validate input', () => {
expect(input).toBeTruthy();
});
mocha-allure-reporter: Also supports allure.step() with identical syntax:allure.step('Check response status', () => {
assert.equal(res.statusCode, 200);
});
jasmine-allure-reporter: No attachment API.
jest-allure: Supports binary and text attachments:
allure.attachment('Screenshot', screenshotBuffer, 'image/png');
mocha-allure-reporter: Same attachment API:allure.attachment('Log file', logContent, 'text/plain');
Both jest-allure and mocha-allure-reporter allow setting Allure labels (e.g., epic, feature, story, severity) directly in tests:
// jest-allure
allure.epic('Authentication');
allure.story('Login with valid credentials');
// mocha-allure-reporter
allure.label('epic', 'Authentication');
allure.label('story', 'Login with valid credentials');
jasmine-allure-reporter only supports limited metadata via Jasmine’s built-in mechanisms, which don’t map cleanly to Allure’s labeling system.
All three write Allure result files (.json or .xml) to a configured output directory (default: allure-results). However, only the active reporters (jest-allure, mocha-allure-reporter) support modern configuration options.
For example, in jest-allure, you can customize the results directory via environment variables:
ALLURE_RESULTS_DIR=./custom-results npx jest
Similarly, mocha-allure-reporter respects the ALLURE_RESULTS_DIR env var or can be configured programmatically.
jasmine-allure-reporter offers minimal configuration and hardcodes paths in older versions.
If you’re stuck on Jasmine due to legacy code, do not add jasmine-allure-reporter to new tests. Instead, consider migrating to Jest or Mocha incrementally, or use a generic Allure adapter that doesn’t rely on this deprecated package.
Choose jest-allure. It integrates cleanly with Jest’s setup lifecycle, supports TypeScript out of the box, and gives you full access to Allure’s feature set without polluting your test globals excessively.
Go with mocha-allure-reporter. It’s stable, well-documented, and works seamlessly with Mocha’s flexible test structure, including async hooks and dynamic test generation.
| Feature | jasmine-allure-reporter | jest-allure | mocha-allure-reporter |
|---|---|---|---|
| Maintenance Status | ❌ Deprecated | ✅ Active | ✅ Active |
| Test Steps | ❌ Not supported | ✅ allure.step() | ✅ allure.step() |
| Attachments | ❌ Not supported | ✅ Full support | ✅ Full support |
| Labels (epic, etc.) | ⚠️ Limited | ✅ Direct methods | ✅ Via allure.label() |
| Integration Method | Jasmine reporter | Jest setup file | Mocha CLI or programmatic |
| Recommended For | ❌ Avoid | ✅ New Jest projects | ✅ Mocha-based projects |
jasmine-allure-reporter entirely — it’s deprecated and lacks modern Allure features.jest-allure is the clear choice: it’s well-maintained, feature-complete, and integrates smoothly with Jest’s conventions.mocha-allure-reporter is mature, reliable, and gives you the same level of control over Allure reporting as its Jest counterpart.Ultimately, your test runner dictates your Allure reporter. But with Jasmine’s option off the table, the decision comes down to aligning with your existing testing infrastructure — not comparing feature parity between equally viable tools.
Do not choose jasmine-allure-reporter for any new project — it is officially deprecated according to its npm page and lacks support for modern Allure features like test steps and attachments. If you're maintaining a legacy Jasmine codebase, prioritize migrating to a supported test runner like Jest or Mocha instead of relying on this unmaintained package.
Choose jest-allure if your project uses Jest as its test runner. It provides full access to Allure's feature set — including test steps, attachments, and labels — through a clean global allure object, integrates via Jest's standard setup mechanism, and is actively maintained with good TypeScript support.
Choose mocha-allure-reporter if you're using Mocha for testing, especially in Node.js environments or legacy browser test suites. It offers complete Allure integration with step tracking, attachments, and metadata labeling, and can be configured via CLI flags or programmatically, making it flexible for various Mocha setups.
A plugin to generate an Allure report out of Jasmine tests.
Add the lib into package.json and then configure the plugin:
// conf.js
var AllureReporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(new AllureReporter({
resultsDir: 'allure-results'
}));
Put the above code into the onPrepare inside of your conf.js:
// conf.js
exports.config = {
framework: 'jasmine2',
onPrepare: function() {
var AllureReporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(new AllureReporter({
resultsDir: 'allure-results'
}));
}
}
The Reporter will generate xml files inside of a resultsDir, then we need to generate HTML out of them. You can
use Maven for that. Copy ready-to-use pom.xml from node_modules/jasmine-allure-reporter and run:
mvn site -Dallure.results_pattern=allure-results
It will put HTMLs into target/site/allure-maven-plugin folder. To serve them via localhost:1324 use:
mvn jetty:run -Djetty.port=1234
Otherwise choose one of other ways to generate HTML.
onPrepare: function () {
var AllureReporter = require('jasmine-allure-reporter');
jasmine.getEnv().addReporter(new AllureReporter());
jasmine.getEnv().afterEach(function(done){
browser.takeScreenshot().then(function (png) {
allure.createAttachment('Screenshot', function () {
return new Buffer(png, 'base64')
}, 'image/png')();
done();
})
});
}
Note done callback!
allure-js-commons.See the system tests to quickly check how the reporter works in real life:
node_modules/protractor/bin/protractor ./test/system/conf.js