Mocha将不同的参数传递给每个测试文件

时间:2019-01-02 10:50:37

标签: javascript mocha

我有一个带有单个描述的测试文件,我想运行两次,但是每次我想将不同的参数传递给它时。 我的代码如下:

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'

有什么想法吗? 任何帮助将不胜感激!

0 个答案:

没有答案