jasmine - 如何获取规范名称以用作量角器-html-reporter-2 中的输出文件名?
问题描述
我正在使用量角器 html 记者 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(function(config){
console.log(config.specs);
});
,它返回
['D:\projects\HeartlandSSP\Automation\TenantManagement\Ssp.TenantManagement.Protractor_Test\specs\createTenantSpec.js','C:\Users\renusri.rajalingam\AppData\Roaming\npm\node_modules\protractor\built\frameworks\ __protractor_internal_afterEach_setup_spec.js' ]
但实际的规范名称createTenantSpec.js 没有返回。我只需要规范的文件名,而不需要描述的名称或它的功能。由于我有 5 个规格,我需要使用其规格名称生成单独的报告。谁能帮我解决这个问题?
解决方案
的值config.specs
是一个数组,根据输出我们有文件的绝对路径在 index 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()
=>点击我
推荐阅读
- git - git@vger.kernel.org 电子邮件问题/错误报告被忽略
- wavesplatform - 使用 Python 或 JS 编译 RIDE 合约
- git - 在 Jenkins 管道中转义双引号
- javascript - 通过在浏览器中使用 momentjs 将 serverdate(iso) 转换为 jsdate 得到不同的结果。如何解决?
- elasticsearch - 两个日期字段的结果之间的差异然后取平均值
- mysql - 错误号:2013 查询期间丢失与 MySQL 服务器的连接
- flutter - 输入'_StreamHandlerTransformer
' 不是 'StreamTransformer 类型的子类型 , 动态>' - c# - WPF MVVM Listview:Leftdoubleclick 是否需要写入事件?
- excel - 第一次复制尝试时 VBA 中的“运行时错误 1004:工作表类的复制方法失败”
- spring - 调用 REST API 会导致内部服务器错误,如何调试?