从量角器测试中获取文件名

时间:2019-09-18 15:27:27

标签: typescript protractor mocha

我的套件中有很多测试,我想在运行测试时打印出文件名,或者在所有测试失败时包括文件名。

我可以在console.log(config.specs)中用browser.getProcessedConfig()打印出规格,但它仅显示为glob模式,而我需要完整的文件名。我已经尝试过config.suites,但它可以打印出所有套件,而不仅仅是测试中运行的套件。

conf.shared.ts

await browser.getProcessedConfig().then(async function(config: any) {
        });
        console.log(config.specs)
        console.log(config.suites)
        return config.specs;

config.specs的输出

 '../../../../lib/tests/home/**/*.myparam*.js'

config.suites的输出

 mysuite:
    '../../../../lib/tests/home/**/market/**/*.*.myfilename.js',
  mysuite2:
        '../../../../lib/tests/home/**/market2/**/*.*.myfilename.js',
  mysuite3:
        '../../../../lib/tests/home/**/market3/**/*.*.myfilename.js',
  mysuite4:
        '../../../../lib/tests/home/**/market4/**/*.*.myfilename.js'

1 个答案:

答案 0 :(得分:0)

在您的conf.js中将其添加到onPrepare

onPrepare() {

        /**
         *  Set global environment configuration
         */
        Object.defineProperty(global, '__stack', {
            get: function () {
                let orig = Error.prepareStackTrace;
                Error.prepareStackTrace = function (_, stack) {
                    return stack;
                };
                let err = new Error;
                Error.captureStackTrace(err, arguments.callee);
                let stack = err.stack;
                Error.prepareStackTrace = orig;
                return stack;
            }
        });

        // returns name of the file from which is called
        Object.defineProperty(global, '__file', {
            get: function () {
                let path = __stack[1].getFileName();
                try { //*nix OSes
                    return path.match(/[^\/]+\/[^\/]+$/)[0];
                } catch (error) { //Windows based OSes
                    return path.match(/[^\\]+\\[^\\]+$/)[0];    
                }
            }
        });
        // returns function name from which is called
        Object.defineProperty(global, '__function', {
            get: function () {
                return __stack[1].getFunctionName();
            }
        });
        // returns line number of the position in code when called
        Object.defineProperty(global, '__line', {
            get: function () {
                return __stack[1].getLineNumber();
            }
        });

    },

,然后在框架中的任何位置(规范或页面对象)运行它

console.log(__file);
console.log(__function);
console.log(__line);

您会得到类似的东西

// test.spec.js
// funcName()
// 56

显然,您可以根据需要调整代码