Jasmine 如何获取规范名,将其用作dragrator-html-reporter-2中的输出文件名?

Jasmine 如何获取规范名,将其用作dragrator-html-reporter-2中的输出文件名?,jasmine,protractor,Jasmine,Protractor,我正在使用Progrator html reporter 2进行报告。我需要得到规范名为html报告输出文件名 我正在配置文件中使用下面的代码 var today = new Date(), timeStamp = today.getMonth() + 1 + '-' + today.getDate() + '-' + today.getFullYear(); onPrepare: function () { browser.driver.manage().window().maxi

我正在使用Progrator html reporter 2进行报告。我需要得到规范名为html报告输出文件名

我正在配置文件中使用下面的代码

var today = new Date(),
timeStamp = today.getMonth() + 1 + '-' + today.getDate() + '-' + today.getFullYear();
onPrepare:
 function () 
{
    browser.driver.manage().window().maximize();
    var fs = require('fs-extra');        

    scriptName=function(){
        return browser.getProcessedConfig().then(function(config){
        return config.specs;
        });
    };

    fs.emptyDir('./target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots/', function (err) {
        console.log(err);
    });
    jasmine.getEnv().addReporter({
        specDone: function(result) {
            //if (result.status == 'failed' || result.status == 'passed') {
            if (1==1) {
                browser.getCapabilities().then(function (caps) {
                    var browserName = userData.testUser.browser.toUpperCase();

                    browser.takeScreenshot().then(function (png) {
                        var stream = fs.createWriteStream('./target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots/'+ result.fullName+'.png');
                        stream.write(new Buffer(png, 'base64'));
                        stream.end();
                    });
                });
            }
        }
    });



    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
        consolidateAll: true,
        savePath: 'target/XMLReports',
        filePrefix: 'xmlresults'
    }));

},

onComplete: function() {
    var browserName, browserVersion;
    var capsPromise = browser.getCapabilities();

    capsPromise.then(function (caps) {
        browserName = userData.testUser.browser.toUpperCase();
        platform=caps.get('platform');
        browserVersion = caps.get('version');


        testConfig = {
            reportTitle: 'Test Execution Report',
            outputPath: './target/htmlReports/'+scriptName+'-'+timeStamp,
            screenshotPath: './target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots',
            testBrowser: browserName,
            browserVersion: browserVersion,
            outputFilename:'ProtractorTestReport',
            testPlatform: platform,
            //browserVersion: browserVersion,
            modifiedSuiteName: true,
            screenshotsOnlyOnFailure: false
        };
        new HTMLReport().from('./target/XMLReports/xmlresults.xml', testConfig);
    });
},

plugins: [{
    package: 'jasmine2-protractor-utils',
    disableHTMLReport: true,
    disableScreenshot: false,
    screenshotPath:'./target/htmlReports/'+scriptName+'-'+timeStamp+'/screenShots',
    screenshotOnExpectFailure:true,
    screenshotOnSpecFailure:true,
    clearFoldersBeforeTest: true,
    htmlReportDir: './target/htmlReports'

}],
我试过了
browser.getProcessedConfig().then(函数(配置){
console.log(config.specs);
});
,它返回

['D:\projects\HeartlandSSP\Automation\TenantManagement\Ssp.TenantManagement.dragor\u Test\specs\createTenantSpec.js', 'C:\Users\renusri.rajalingam\AppData\Roaming\npm\node\u modules\dragrator\builded\frameworks\uuuuuu dragrator\u internal\u每次安装后\u spec.js']


但是实际的规范名createTenantSpec.js不会返回。我只需要规范的文件名,而不需要描述或它的函数名。因为我有5个规范,所以我需要用规范名生成单独的报告。有人能帮我一下吗?

config.specs的值是一个数组,根据输出,文件的绝对路径位于索引
0
。因此,可以按如下方式提取文件名

browser.getProcessedConfig().then(function (config) {
  var fullName = config.specs[0];
  var fileName = fullName.substring(fullName.lastIndexOf('/')+1);
  console.log('fileName:', fileName);
});

// output: 
// fileName: createTenantSpec.js
或者,如果希望将所有文件名都包含在此数组中,可以使用以下命令:

browser.getProcessedConfig().then(function (config) {
  var fileNames = config.specs.map(function(path) { 
    return path.substring(path.lastIndexOf('/')+1); 
  });
  fileNames.forEach(function(fileName) {
    console.log('fileName:', fileName);
  });
});

// output:
// fileName: createTenantSpec.js
// __protractor_internal_afterEach_setup_spec.js
参考资料:

array.prototype.map()
=>


array.prototype.forEach()

browser.getProcessedConfig().then(function (config) 
{
            var fullName = config.specs[0];
            console.log('fullName' ,fullName);
            var start= fullName.lastIndexOf('\\');
            var stop=fullName.length;
            console.log('start:', start);
            console.log('stop:', stop);
            var fileName = fullName.substring(start+1,stop);
            console.log('fileName:', fileName);
           
});

我尝试用上面的代码替换var fullName=config.specs;(实际返回上面提到的数组输出)但仍然返回未定义的。我无法提取名称。@Renu嗯,我没有看到它是一个数组。我调整了我的答案。