All files / lib allure.js

100% Statements 59/59
100% Branches 25/25
100% Functions 16/16
100% Lines 48/48

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186                3x   3x 3x   3x       3x 2x 2x 2x 2x 2x               2x 1067x                 2x 81x                 2x 39x               2x 36x                 2x 2x 1x                 2x 2x 1x                   2x 2x 1x                   2x 2x 1x                     2x 2x 1x                   2x 2x 1x                   2x 2x 1x                   2x 2x 1x                   2x 1x                   2x 1x       16x     3x  
"use strict";
 
/**
 * [Allure](http://allure.qatools.ru/) wrapper.
 *
 * @module
 */
 
const fs = require("fs");
 
const Allure = require("allure-js-commons");
const Step = require("allure-js-commons/beans/step");
 
const CONF = require("./config");
 
let allure;
 
if (CONF.allure.use) {
    allure = new Allure();
    allure.setOptions({ targetDir: CONF.allure.dir });
    allure.PASSED = "passed";
    allure.FAILED = "failed";
    allure.SKIPPED = "skipped";
    /**
     * Defines if allure helper has steps or no.
     *
     * @memberOf module:allure
     * @method
     * @return {boolean} `true` if it has steps, `false` otherwise.
     */
    allure.hasSteps = function () {
        return this.getCurrentSuite().currentStep instanceof Step;
    };
    /**
     * Defines if test is started or no.
     *
     * @memberOf module:allure
     * @method
     * @return {boolean} `true` if test is started, `false` otherwise.
     */
    allure.isTestStarted = function () {
        return !!(this.getCurrentSuite() && this.getCurrentTest() && !this.getCurrentTest().status);
    };
    /**
     * Starts step if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Step name.
     */
    allure.step = function () {
        if (this.isTestStarted()) this.startStep.apply(this, arguments);
    };
    /**
     * Ends step as passed if test is started.
     *
     * @memberOf module:allure
     * @method
     */
    allure.pass = function () {
        if (this.isTestStarted()) this.endStep(this.PASSED);
    };
    /**
     * Adds test story if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Story name.
     */
    allure.story = function (name) {
        if (!this.isTestStarted()) return;
        this.getCurrentTest().addLabel("story", name);
    };
    /**
     * Adds test feature if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Feature name.
     */
    allure.feature = function (name) {
        if (!this.isTestStarted()) return;
        this.getCurrentTest().addLabel("feature", name);
    };
    /**
     * Adds test environment value if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Environment name.
     * @arg {string} value - Environment value.
     */
    allure.addEnvironment = function (name, value) {
        if (!this.isTestStarted()) return;
        this.getCurrentTest().addParameter("environment-variable", name, value);
    };
    /**
     * Adds test description if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} desc - Description.
     * @arg {string} type - Mime type.
     */
    allure.addDescription = function (desc, type) {
        if (!this.isTestStarted()) return;
        this.getCurrentTest().setDescription(desc, type);
    };
    /**
     * Attach content to test if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Content name.
     * @arg {string} content - Content body.
     * @arg {string} type - Mime type.
     */
    allure.attach = function (name, content, type) {
        if (!this.isTestStarted()) return;
        this.addAttachment(name, Buffer.from(content), type);
    };
    /**
     * Attach JSON to test if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - JSON name.
     * @arg {string} obj - Object to convert to JSON.
     */
    allure.attachJson = function (name, obj) {
        if (!this.isTestStarted()) return;
        this.attach(name, JSON.stringify(obj, null, "  "), "application/json");
    };
    /**
     * Attach image to test if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Image name.
     * @arg {string} imgPath - Image path.
     */
    allure.attachImage = function (name, imgPath) {
        if (!this.isTestStarted()) return;
        this.attach(name, fs.readFileSync(imgPath), "image/png");
    };
    /**
     * Attach video to test if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Video name.
     * @arg {string} videoPath - Video path.
     */
    allure.attachVideo = function (name, videoPath) {
        if (!this.isTestStarted()) return;
        this.attach(name, fs.readFileSync(videoPath), "video/mp4");
    };
    /**
     * Attach text to test if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - Text name.
     * @arg {string} txt - Text content.
     */
    allure.attachText = function (name, txt) {
        this.attach(name, txt, "text/plain");
    };
    /**
     * Attach HTML to test if test is started.
     *
     * @memberOf module:allure
     * @method
     * @arg {string} name - HTML name.
     * @arg {string} html - HTML content.
     */
    allure.attachHtml = function (name, html) {
        this.attach(name, html, "application/html");
    };
 
} else {
    allure = new Proxy({}, { get: () => () => {} });
};
 
module.exports = allure;