Мокко передает различные параметры в каждый тестовый файл - PullRequest
0 голосов
/ 02 января 2019

У меня есть тестовый файл с одним описанием, который я хочу запустить дважды, но каждый раз, когда я хочу передать в него разные параметры.Мой код выглядит так:

MochaRunner.js

'use strict';

const fs = require('fs');
const path = require('path');
const Mocha = require('mocha');
const uuidv1 = require('uuid/v1');

class MochaRunner {
    /**
     * @param {Object} options
     */
    constructor(options = {}) {
        this._tmps = [];
        this._mocha = new Mocha(options);
    }

    /**
     * Run tests
     * @param {Array} tests
     * @returns {Promise}
     */
    run(tests) {
        return new Promise((resolve, reject) => {
            const Config = require('../config').create();
            let counter = 0;
            tests.forEach(test => {
                const testDir = path.dirname(test.testPath);
                const tmpTest = path.join(testDir,`${uuidv1()}.spec.js`);

                fs.writeFileSync(tmpTest, fs.readFileSync(test.testPath));
                this._tmps.push(tmpTest);
                this._mocha.addFile(tmpTest);
                Config.setOptions('var ' + counter++);
            });

            this._mocha.run((err) => {
                return err ? reject(err) : resolve();
            });
        }).catch(() => {
            return this.cleanup();
        });
    }

    /**
     * Get mocha instance
     * @returns {Mocha}
     */
    getMocha() {
        return this._mocha;
    }

    /**
     * Remove tmp test files
     * @returns {Promise}
     */
    cleanup() {
        this._tmps.forEach(tmpTest => {
            fs.unlinkSync(tmpTest);
        });

        return Promise.resolve();
    }
    }

    module.exports = MochaRunner;

Config.js

class Config {
    constructor() {
        this.options = {};
    }

    setOptions(options){
        this.options = options;
    }

}

module.exports = {
    _instance: null,
    create: function(){
        if (this._instance){
            return this._instance;
        }
        this._instance= new Config();
        return this._instance;
    }
};

test.e2e.test.js

const chai = require('chai');
const Config = require('./config').create();

const assertionStyles = {
    assert: chai.assert,
    expect: chai.expect,
    should: chai.should,
};

setImmediate(async () => {

    describe('describe blah blha', function () {
        console.log(Config.options);
        it('test case', function () {
            assertionStyles.expect(true).to.be.true;
        });

    });
    run();
});

Я делаю это, когда хочу запустить приведенный выше код:

let tests = ['test.e2e.test.js', 'test.e2e.test.js'];
let mocha = new MochaRunner({});
            await mochaRunner.run(tests).then(() => {
                mochaRunner.cleanup();
            });

В приведенном выше примере я хочу передать другие данные, когда тест будет запущен во второй раз.

Например, я хочу, чтобы первый файл прочитал параметр из Config со значением:

'var 0'

, а второй файл прочитал параметр со значением:

'var 1'

Есть идеи, пожалуйста?Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...