2017-08-22 73 views
1

閱讀「開」的未定義的屬性我試圖生成使用黃瓜HTML的記者不能在新JsonFormatter

得到錯誤的HTML報告。我不確定這個問題是否屬於這個問題! 如果是這樣,任何人都可以請我來解決這個問題。

另外請讓我知道,如果你有更好的解決方案,使用打字機生成與黃瓜量角器報告。 (請考慮下面的版本太)

量角器版本:5.1.2

黃瓜版本:3.0.0

ScenarioHook.ts

import {defineSupportCode} from "cucumber"; 
import {CucumberReportExtension} from 
"../reporting/CucumberReportExtension"; 

defineSupportCode(({AfterAll}) => { 

    AfterAll(async() => { 
    new CucumberReportExtension().myJsonFormatter; 
    }); 
}); 

CucumberReport Extension.ts

import * as fs from 'fs'; 
import { mkdirp } from 'mkdirp'; 
import * as report from 'cucumber-html-reporter'; 
let Cucumber = require('cucumber'); 

export class CucumberReportExtension { 

private jsonDir = process.cwd() + "/reports/json"; 
private htmlDir = process.cwd() + "/reports/html"; 
private jsonFile = this.jsonDir + "/cucumber_report.json"; 

private cucumberReporterOptions = { 
    theme: "bootstrap", 
    jsonFile: this.jsonFile, 
    output: this.htmlDir + "/cucumber_reporter.html", 
    reportSuiteAsScenarios: true, 
    metadata: { 
     "App Version":"0.0.1", 
     "Test Environment": "TestingMicroSheet", 
     "Browser": "Chrome 59.0.945", 
     "Platform": "Windows 10", 
     "Parallel": "Scenarios", 
     "Executed": "Local" 
    } 
}; 

private CreateReportFile(dirName, fileName, fileContent) { 
    //Check if the directory exist 
    if (!fs.existsSync(dirName)) 
     mkdirp.sync(dirName); 
    try { 
     fs.writeFileSync(fileName, fileContent); 
    } 
    catch (message) { 
     console.log("Failed to create File/Directory :" + message); 
    } 
} 

private GenerateCucumberReport(cucumberReportOption){ 
    report.generate(cucumberReportOption); 
} 

myJsonFormatter = new Cucumber.JsonFormatter({ 
    log: jLog => { 
     this.CreateReportFile(this.jsonDir, this.jsonFile, jLog); 
     this.GenerateCucumberReport(this.cucumberReporterOptions); 
    } 
}); 
} 
export let JsonFormatter = new CucumberReportExtension().myJsonFormatter; 

config.ts

import { Config } from 'protractor'; 

export let config: Config = { 

seleniumAddress: 'http://localhost:4444/wd/hub', 

framework: 'custom', 
frameworkPath: require.resolve('protractor-cucumber-framework'), 
specs: ["../features/*.feature"], 

baseUrl: "http://localhost:4200/", 

cucumberOpts: { 
    compiler: "ts:ts-node/register", 
    strict: true, 
    format: ['json:../reporting/results.json'], 
    require: ['../steps/*.js', '../hooks/*.js'], 
    tags: '@smoke' 
} 
} 

的package.json

{ 
    "name": "protractor-cucumber-sample", 
    "version": "0.0.0", 
    "private": true, 
    "scripts": { 
    "start": "node ./bin/www" 
    }, 
    "dependencies": { 
    "@types/jasmine": "^2.5.53", 
    "body-parser": "~1.17.1", 
    "cookie-parser": "~1.4.3", 
    "debug": "~2.6.3", 
    "express": "~4.15.2", 
    "jade": "~1.11.0", 
    "morgan": "~1.8.1", 
    "serve-favicon": "~2.4.2" 
    }, 
"devDependencies": { 
"@types/chai": "^4.0.3", 
"@types/cucumber": "^2.0.3", 
"@types/mkdirp": "^0.5.0", 
"chai": "^4.1.1", 
"chai-as-promised": "^7.1.1", 
"cucumber": "^3.0.0", 
"cucumber-html-reporter": "^2.0.3", 
"jasmine": "^2.7.0", 
"jasminewd2": "^2.1.0", 
"protractor-cucumber-framework": "^4.0.2", 
"ts-node": "^3.3.0", 
"typescript": "^2.4.2" 
    } 
} 

請讓我知道我f所需的其他信息可幫助您解決此問題。

如果這不是合適的論壇,請您回復我以正確的論壇詳細信息發佈此問題。

在此先感謝。

+0

這是一個打字稿錯誤,我想你的項目中沒有安裝節點類型!你還使用哪個版本的節點? –

+0

我正在使用節點版本** v6.11.2 **。在上面的錯誤信息'\ node_modules \ cucumber \ src \ formatter \ json_formatter.js:21:5'中指的是'cucumber \ src \'文件夾。我在本地和全球安裝了黃瓜。我找不到'src'文件夾。 – Vinni

+0

相反,我發現'options.eventBroadcaster。on('test-run-finished',_this.onTestRunFinished.bind(_this));'在'cucumber \ lib \ formatter \ json_formatter.json'中。嘗試在** CucumberReportExtension.ts **中爲** eventBroadcaster **傳遞[test-step-finished](https://github.com/cucumber/cucumber/pull/172)。沒有運氣。獲取相同的錯誤 – Vinni

回答

1

使用最新的cucumber 3.0,您必須將節點event emitter傳遞給您的自定義格式化程序。有關如何節點事件的工作,請通過這個鏈接的詳細信息 - https://nodejs.org/api/events.html

我們使用您的CucumberReportExtension.ts

import * as fs from 'fs'; 
import { mkdirp } from 'mkdirp'; 
import * as report from 'cucumber-html-reporter'; 
let Cucumber = require('cucumber'); 
import { EventEmitter } from 'events'; 
const eventBroadcaster = new EventEmitter(); 

export class CucumberReportExtension { 

private jsonDir = process.cwd() + "/reports/json"; 
private htmlDir = process.cwd() + "/reports/html"; 
private jsonFile = this.jsonDir + "/cucumber_report.json"; 

private cucumberReporterOptions = { 
theme: "bootstrap", 
jsonFile: this.jsonFile, 
output: this.htmlDir + "/cucumber_reporter.html", 
reportSuiteAsScenarios: true, 
metadata: { 
    "App Version":"0.0.1", 
    "Test Environment": "TestingMicroSheet", 
    "Browser": "Chrome 59.0.945", 
    "Platform": "Windows 10", 
    "Parallel": "Scenarios", 
    "Executed": "Local" 
    } 
}; 

private CreateReportFile(dirName, fileName, fileContent) { 
//Check if the directory exist 
if (!fs.existsSync(dirName)) 
    mkdirp.sync(dirName); 
try { 
    fs.writeFileSync(fileName, fileContent); 
} 
catch (message) { 
    console.log("Failed to create File/Directory :" + message); 
} 
} 

private GenerateCucumberReport(cucumberReportOption){ 
report.generate(cucumberReportOption); 
} 

myJsonFormatter = new Cucumber.JsonFormatter({ 
     eventBroadcaster: eventBroadcaster, 
     log: jLog => { 
      this.CreateReportFile(this.jsonDir, this.jsonFile, jLog); 
      this.GenerateCucumberReport(this.cucumberReporterOptions); 
     } 
}); 
} 
export let JsonFormatter = new CucumberReportExtension().myJsonFormatter; 

注:我沒有測試過,但它應該工作!一旦我完成了新的黃瓜3.0功能實驗後,我會更新答案!