Jenkinsμμ κ°λκΈ° ν μ€νΈλ₯Ό μ€ννκ³ μΆμΌλ―λ‘ junit 리ν¬ν°(karmaμ κ°μ)κ° μμΌλ©΄ Jenkinsμμ ν μ€νΈ μνλ₯Ό λ³΄κ³ ν μ μμΌλ©΄ λ§€μ° μ μ©ν©λλ€.
μ¬κΈ° λ΄ 2μΌνΈ: Gruntλ₯Ό λΉλ λκ΅¬λ‘ μ¬μ©νλ κ²½μ° grunt-jasmine-node λ₯Ό μ¬μ©νμ¬ κ°λκΈ° ν μ€νΈλ₯Ό μ€ννκ³ JUnitκ³Ό μ μ¬ν λ³΄κ³ μλ₯Ό μ»λλ‘ κ΅¬μ±ν μ μμ΅λλ€!
κ΅¬μ± νμΌμμ μ΄ μμ μ μ½κ° ν΄νΉλ λ°©μμΌλ‘ μννλ λ°©λ² - μ λ Protractorμ μ체 ν μ€νΈ μ νκ΅°μΌλ‘ μ΄κ²μ ν μ€νΈνμ΅λλ€.
npm install jasmine-reporters
κ΅¬μ± νμΌ:
require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(
'outputdir/', true, true));
// The main suite of Protractor tests.
exports.config = {
seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',
chromeDriver: './selenium/chromedriver',
seleniumAddress: 'http://localhost:4444/wd/hub',
// Spec patterns are relative to this directory.
specs: [
'*_spec.js'
],
capabilities: {
'browserName': 'chrome'
},
baseUrl: 'http://localhost:8000',
};
μΆκ° μμ λ μ΄μ https://github.com/angular/protractor/blob/master/spec/junitOutputConf.js μ νμλ©λλ€.
λλ ν 리μ μλ κ²½λ‘ λλ μ λ κ²½λ‘λ₯Ό νμ©ν©λκΉ? μλ κ²½λ‘κ° μλνμ§ μλ λμ μ λ κ²½λ‘λ μλν©λλ€. ../Reportsμ κ°μ μ΅μ
μ μλνμ§λ§ μ무 μμ©μ΄ μμ΅λλ€.
jasmine.getEnv().addReporter(
μλ‘μ΄ jasmine.JUnitXmlReporter('xmloutput', true, true));
},
νμ λ° μμ , λ΄ λ§μ§λ§ μ견 무μ
μ κ° λλνμ§ μμμ ν΄λκ° λ§λ€μ΄μ§κΈΈ κΈ°λνλλ° μ¬μ€ 미리 ν΄λλ₯Ό λ§λ€μ΄λμΌ νμ΅λλ€.
@juliemr grunt-concurrent
λ₯Ό ν΅ν΄ λ³λ ¬λ‘ μ€νλλ λ κ°μ κ°λκΈ° μΈμ€ν΄μ€μ ν¨κ» μ¬μ©νλ λ°©λ²μ 무μμ
λκΉ? Firefoxμ Chromeμμ λμμ ν
μ€νΈλ₯Ό μ€νν μ μλλ‘ νλ λ° νμνμ§λ§ νλμ XMLμ΄ λ€λ₯Έ νλλ₯Ό λ체νκ² λμ΄ Jenkinsλ₯Ό νΌλμ€λ½κ² λ§λ€ κ²μ
λλ€.
μλ§λ κ°λκΈ°λ Karmaκ° νλ κ²κ³Ό μ μ¬ν μ΄μ λ‘ λ³λ ¬λ‘ μ€ννλ λ°©λ²μ μμμΌ ν©λκΉ?
@mzgol λμ μμ μΌλ‘ μ€νλλ κ° λμμ΄ νλ«νΌμ λ°λΌ λ€λ₯Έ junit xml λ³΄κ³ μλ₯Ό μΆλ ₯νλλ‘ ν΄λ³΄μ ¨μ΅λκΉ? λμ μ΄λ¦μ κΈ°λ°μΌλ‘ μ μΆλ ₯ ν΄λλ₯Ό λ§λ€ μ μμ΅λλ€.
λν κΉ¨λν νκ²½μμ λΉλ λ¨κ³λ₯Ό λ³λ ¬λ‘ μ€νν μ μλ Jenkinsμ λ€μ€ κ΅¬μ± λμμ μ΄ν΄λ³Ό μλ μμ΅λλ€. λν μκΈμ λΉλμ κ°μ λ©μ§ κΈ°λ₯μ κ°μ§κ³ μμΌλ©° κ·Έλ°νΈλ³΄λ€ λμμ±μ λ μ μ‘°μ ν μ μμ΅λλ€.
mochaμλ λΉμ·ν ꡬμ±μ΄ μμ΅λκΉ? (μ λ μ¬μ€λ―Όμ μ¬μ©νμ§ μκΈ° λλ¬Έμ)
@mzgol jvandyke(κ°μ¬ν©λλ€)μ μ μμ μλνλλ° μ μλν©λλ€.
onPrepare: function(){
require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then(function(caps){
var browserName = caps.caps_.browserName.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = browserName + "-" + browserVersion + "-";
jasmine.getEnv().addReporter(new
jasmine.JUnitXmlReporter("protractor_output", true, true,prePendStr));
});
},
κ°μ¬ ν΄μ. μ μκ²λ ν¨κ³Όκ° μμ΅λλ€.
onPrepare: ν¨μ(){
require('jasmine-reporters');
var capsPromise = λΈλΌμ°μ .getCapabilities();
capsPromise.then(ν¨μ(μΊ‘){
var λΈλΌμ°μ μ΄λ¦ = caps.caps_.browserName.toUpperCase();
var λΈλΌμ°μ λ²μ = caps.caps_.version;
var prePendStr = λΈλΌμ°μ μ΄λ¦ + "-" + λΈλΌμ°μ λ²μ + "-";
jasmine.getEnv().addReporter(μ κ·
jasmine.JUnitXmlReporter("κ°λκΈ°_μΆλ ₯", μ°Έ, μ°Έ, prePendStr));
});
},
μ΄ μμ html 리ν¬ν°λ₯Ό λ§λ€μμ΅λλ€. κ·νμ μ견μ μλ €μ£ΌμΈμ
https://github.com/jintoppy/protractor-html-screenshot-reporter
@tracycummins μ λ무 κ±Έλ €μ ν΄λ μμ±μ λ¬Έμμ μΆκ°νλ κ²λ μμ΄λμ΄μΌ μ μμ΅λλ€!
@juliemr μνμ λμ΄λ λͺ¨λ μ΅μ μ΄ μ§κ²Ήμ΅λλ€. μ΄ μ€λ₯κ° λ°μν©λλ€. λͺ¨λ ν¬μΈν° κ°μ¬
/home/jack/prototype/conf.js:19
jasmine.getEnv().addReporter(μλ‘μ΄ jasmine.JUnitXmlReporter('xmlμΆλ ₯', μ°Έ, μ°Έ));
^^
TypeError: undefinedλ ν¨μκ° μλλλ€.
export.config.onPrepareμμ (/home/jack/prototype/conf.js:19:33)
Runner.runFilenamesOrFns_μμ (/home/usr/lib/node_modules/protractor/lib/runner.js:64:9)
Runner.runTestPreparersμμ (/home/usr/lib/node_modules/protractor/lib/runner.js:91:8)
runner.controlFlow.execute.then.jasmineNodeOptsμμ (/home/usr/lib/node_modules/protractor/lib/frameworks/jasmine.js:39:12)
webdriver.promise.ControlFlow.runInNewFrame_μμ (/home/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
webdriver.promise.ControlFlow.runEventLoop_μμ (/home/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1404:8)
λνΌ μμ _onTimeoutμΌλ‘
Timer.listOnTimeoutμμ ontimeout μΌλ‘
==== λΉλκΈ° μμ
====
ν
μ€νΈ μ€λΉμ μ€ν
Object.exports.runμμ (/home/usr/lib/node_modules/protractor/lib/frameworks/jasmine.js:38:24)
driverprovider_.setupEnv.then.then.then.testResultμμ (/home/usr/lib/node_modules/protractor/lib/runner.js:233:28)
_fulfilled(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:797:54)
self.promiseDispatch.doneμμ (/home/usr/lib/node_modules/protractor/node_modules/q/q.js:826:30)
Promise.promise.promiseDispatch(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:759:13)
/home/usr/lib/node_modules/protractor/node_modules/q/q.js:525:49μμ
νλ¬μ μ(/home/usr/lib/node_modules/protractor/node_modules/q/q.js:108:17)
process._tickCallbackμμ (node.js:423:13)
Function.Module.runMainμμ (module.js:499:11)
// μμ κ΅¬μ± νμΌμ
λλ€.
export.config = {
// μ€ν μ€μΈ μ
λ λ μλ²μ μ£Όμμ
λλ€.
μ
λ λ μ£Όμ: ' http://localhost :4444/wd/hub',
allScriptsTimeout: 30000,
// μΉλλΌμ΄λ² μΈμ€ν΄μ€μ μ λ¬λ κΈ°λ₯.
λ₯λ ₯: {
'browserName': 'νμ΄μ΄νμ€'
},
// μ¬μ ν¨ν΄μ λ€μκ³Ό κ°μ κ²½μ° μ§μ νμ¬ μμ
μ μλμ μ
λλ€.
// κ°λκΈ°κ° νΈμΆλ©λλ€.
μ¬μ: ['example_spec.js'],
// Jasmine λ
Έλμ μ λ¬ν μ΅μ
.
onPrepare: ν¨μ() {
require('jasmine-reporters');
jasmine.getEnv().addReporter(μλ‘μ΄ jasmine.JUnitXmlReporter('xmlμΆλ ₯', μ°Έ, μ°Έ));
},
// Jasmine λ
Έλμ μ λ¬ν μ΅μ
.
jasmineNodeOpts: {
showColors: μ¬μ€,
κΈ°λ³Έ μκ° μ΄κ³Ό κ°κ²©: 30000
}
};
μλ νμΈμ @jkmurthy
λλ λκ°μ λ¬Έμ μ λΆλͺμ³€λ€. [email protected] μ΅μ λ²μ μμλ λͺ¨λ μ΄λ¦μ λ³κ²½νμ΅λλ€. μ΄μ λν λ¬Έμλ μμ§λ§ μ΄ νμΌμ μμ΅λλ€.
https://github.com/larrymyers/jasmine-reporters/blob/master/src/junit_reporter.js
μ¬μ ν λͺ¨λ 'jasmineReporters'κ° μ μλμ§ μμ κ²μ²λΌ μλνλλ‘ λ§λ€ μ μμ΅λλ€.
κ·Έλμ μ΄μ λ²μ μ [email protected] λ‘ μ ννλλ° μλ²½νκ² μλνμ΅λλ€. 리ν¬ν° μ΅μ μμ μΆλ ₯μΌλ‘ μ°Έμ‘°νλ λλ ν 리λ₯Ό μμ±νλμ§ νμΈνμμμ€.
jasmine-reportersλ₯Ό 0.4.1λ‘ λ€μ΄κ·Έλ μ΄λν΄λ μλνμ§ μμ
μλ
onPrepare: ν¨μ() {
var ν΄λ μ΄λ¦ = (μ λ μ§()).toString().split(' ').splice(1, 4).join(' ');
var mkdirp = μꡬ('mkdirp');
var newFolder = "./λ³΄κ³ μ/" + ν΄λ μ΄λ¦;
require('jasmine-reporters');
mkdirp(newFolder, function(err) {
if (err) {
console.error(err);
} else {
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(newFolder, true, true));
}
});
},
μμ§ μ΄μ΄ μλ€
μ΄κ²μ νμ€ν λμκ² λ¬Έμ μ
λλ€. jasmine-reporters 2.0μ μ¬μ©νλ©΄
D:\HgBuild\TPSOneSearch\Unstable\Tyler.TPS.OneSearch\Tyler.TPS.Web.OneSearch\app
\test\e2e\oneSearchChromeConf.js:29
jasmine.getEnv().addReporter(μλ‘μ΄ jasmine.JUnitXmlReporter(uri, t
μ°Έ, μ°Έ, ''));
^^
TypeError: undefinedλ ν¨μκ° μλλλ€.
"new jasmine.JUnitXmlReporter"λ₯Ό "jasmineReporters.JUnitXmlReporter"λ‘ λ³κ²½νλ©΄ jasmineReportersκ° μ μλμ§ μμ΅λλ€.
jasmine-reportersλ₯Ό 0.4.1λ‘ λλ리면 νλ₯νκ² μλν©λλ€.
jasmine-reporters 2.0μ 1.xμ APIκ° λ€λ¦ λλ€. λ§Ήλͺ©μ μΌλ‘ μ λ°μ΄νΈν μλ μμ΅λλ€. λΉμ μ νΈμΆμ μ‘°μ ν©λλ€.
JUnitXmlReporterμ λν junit_reporter.js νμΌμ μ£Όμμ 보면 λ€μκ³Ό κ°μ΄ conf νμΌμ μ€μ νμ΅λλ€.
onPrepare: ν¨μ() {
require('jasmine-reporters');
λ³μ μ΅μ
= {
savePath: 'μΌλΆ νμΌ κ²½λ‘',
ν΅ν©: μ¬μ€,
useDotNotation: μ°Έ
};
jasmine.getEnv().addReporter(μλ‘μ΄ jasmineReporters.JUnitXmlReporter(μ΅μ
));
},
μ΄κ²μ μλν΄μΌν©λκΉ?
"ReferenceError: jasmineReportersκ° μ μλμ§ μμμ΅λλ€" μ€λ₯κ° λ°μν©λλ€.
/**
* μ£Όμ΄μ§ μ¬μ μ€νμ λν JUnit XMLμ μμ±ν©λλ€. λ€μν μ΅μ
μ΄ μμ΅λλ€
* κ²°κ³Όκ° κΈ°λ‘λλ μμΉλ₯Ό μ μ΄νκ³ κΈ°λ³Έκ°μ λ€μκ³Ό κ°μ΅λλ€.
* κ°λ₯ν ν μ μ μμ .xml νμΌμ μμ±νλλ‘ μ€μ ν©λλ€. μ μ₯μ΄ κ°λ₯ν©λλ€
* λ¨μΌ XML νμΌ λλ κ° μ΅μμ describe
μ λν XML νμΌ λλ
* μ€μ²©μ κ΄κ³μμ΄ κ° describe
μ λν XML νμΌ.
*
* μ©λ²:
*
* jasmine.getEnv().addReporter(μλ‘μ΄ jasmineReporters.JUnitXmlReporter(μ΅μ
);
*
* @param {κ°μ²΄} [μ΅μ
]
* @param {string} [savePath] νμΌμ μ μ₯ν λλ ν 리 (κΈ°λ³Έκ°: '')
* @param {boolean} [consolidateAll] λͺ¨λ ν
μ€νΈ κ²°κ³Όλ₯Ό μ μ₯ν μ§ μ¬λΆ
* λ¨μΌ νμΌ(κΈ°λ³Έκ°: true)
* μ°Έκ³ : trueμΈ κ²½μ° {filePrefix}λ μ 체 νμΌ μ΄λ¦μΌλ‘ μ²λ¦¬λ©λλ€(μ μΈ
* νλ)
* @param {boolean} [ν΅ν©] λ΄ν¬λ μ€λͺ
μ μ μ₯ν μ§ μ¬λΆ
* μμ νμΌκ³Ό λμΌν νμΌ(κΈ°λ³Έκ°: true)
* μ°Έκ³ : ν΅ν© λͺ¨λκ° trueμΈ κ²½μ° trueλ μ무 μμ
λ μννμ§ μμ΅λλ€.
* μ°Έκ³ : falseλ λν gatherAllμ falseλ‘ μ€μ ν©λλ€.
* @param {boolean} [useDotNotation] μ€μνΈ μ΄λ¦μ λ€μμΌλ‘ ꡬλΆν μ§ μ¬λΆ
* 곡백 λμ μ , μ¦ "Class init"κ° μλ "Class.init"(κΈ°λ³Έκ°: true)
* @param {string} [filePrefix]λ μμ μΆκ°λλ λ¬Έμμ΄ κ°μ
λλ€.
* xml μΆλ ₯ νμΌ (κΈ°λ³Έκ°: junitresults-)
* μ°Έκ³ : λ§μΌ gatherAllμ΄ μ°Έμ΄λ©΄, κΈ°λ³Έκ°μ λ¨μν "junitresults"μ΄κ³
* μ΄κ²μ μ€μ νμΌ μ΄λ¦μ΄ λ©λλ€(μ: "junitresults.xml").
*/
@john-bridges λ°±ν±μΌλ‘ μ½λλ₯Ό κ°μ μ μμ΅λκΉ? κ·Έκ² μμ΄λ μ½κΈ°κ° μ΄λ ΅μ΅λλ€.
@john-bridges κΈμμ, jasmineReporters
λ³μλ₯Ό μ μνμ§ μμκΈ° λλ¬Έμ λ³μκ° μ μλμ§ μμ κ²μ λΉμ°ν©λλ€. λͺ¨λμ ν λΉν΄μΌ ν©λλ€.
var jasmineReporters = require('jasmine-reporters');
@mzgol λλ λ°λ³΄, 맀λ ₯μ²λΌ μλν©λλ€. λμμ μ£Όμ μ κ°μ¬ν©λλ€.
jasmine-reporters
μ μ΄μ λ²μ μ 리ν¬ν°λ₯Ό jasmine
κ°μ²΄μ μ§μ μ°κ²°νμ΅λλ€. μ΄μ λ λμ μ체 λ΄λ³΄λ΄κΈ°μ μ°κ²°λ©λλ€.
λλ νΌλμ΄ μ΄λμ μλμ§ λ³Έλ€. ;)
@mzgol λμν©λλ€. ν¨μ¬ λ λμ λ°©λ²μ λλ€. λ€μ ν λ² κ°μ¬λ립λλ€.
[email protected]
λ Jasmine 2.xλ₯Ό μ§μνλ©° μμμ κ΄μ°°/λ
Όμν κ²μ²λΌ λ€λ₯Έ ꡬ문과 μ§μ
μ μ κ°μ§λλ€(μ체 κ°μ²΄ λ μ μ jasmine
κ°μ²΄). μ¦, κ°λκΈ°κ° μ¬μ©νλ Jasmine 1.xκ° μλλΌ Jasmine 2.xλ§ μ§μν©λλ€. λ°λΌμ var jasmineReporters = require('jasmine-reporters'); new jasmineReporters.JUnitXmlReporter(/*...*/);
λ₯Ό μννμ¬ κ°λκΈ° ꡬμ±μμ κ³Όκ±° μ€λ₯λ₯Ό μ»μ μ μμ§λ§ Jasmine 2.x μ΄λ²€νΈ λ° λ¦¬ν¬ν° μΈν°νμ΄μ€λ₯Ό κΈ°λ€λ¦¬κ³ μκΈ° λλ¬Έμ μλ―Έ μλ μΆλ ₯μ μ»κΈ°κ° μ΄λ ΅μ΅λλ€.
JUnitXmlReporterκ° Jasmine 1.xμ ν¨κ» μλνλλ‘ νλ μ μ ν λ°©λ²μ @juliemr μ μλ μ§μΉ¨μ μ½κ° μμ νλ κ²μ λλ€.
npm install jasmine-reporters@~1.0.0
κ·Έλ° λ€μ νμμ κ°μ΄ κ·Έλ μ λλ¨Έμ§ μ§μ μ¬νμ λ°λ₯΄μμμ€.
[email protected]
κ° [email protected]
$ μ λ€λ₯Έ μ μ ν΄κ²°νκΈ° μν΄ jasmine-reporters READMEλ₯Ό μ κ²νμ΅λλ€. μ§λ¬Έμ΄ λ§μ΄ λμ€κΈ° λλ¬Έμ κ°λκΈ°μ ν¨κ» μ¬μ€λ―Ό 리ν¬ν°λ₯Ό μ¬μ©νλ λ°©λ²μ λν νΉμ μΉμ
λ μΆκ°νμ΅λλ€.
μ¬κ°νκ² λΆμ‘±ν λ¬Έμλ₯Ό μ§μ ν΄ μ£Όμ @ksraja μκ² κ°μ¬λ립λλ€.
μ΄ λ¬Έμ κ° κ³μ λ«νλ μ΄μ λ μ¬μ ν ββλ¬Έμ μμ΄ λΆλͺ ν©λλ€.
onPrepare: function() {
require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('test-target/', true, true));
browser.driver.get('http://localhost:9000');
require('./test/e2e/models/login-page').login();
},
μ€λ₯ λ°μ:
Running "protractor:e2e" (protractor) task
/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-reporters/src/jasmine.console
_reporter.js:2
if (! jasmine) {
^
ReferenceError: jasmine is not defined
at /Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-reporters/src/jasmine.
console_reporter.js:2:11
at Object.<anonymous> (/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-re
porters/src/jasmine.console_reporter.js:144:3)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-re
porters/src/load_reporters.js:1:63)
at Module._compile (module.js:456:26)
>>
Fatal error: protractor exited with code: 8
@jonniespratley npm install jasmine-reporters
κ° κΈ°λ³Έμ μΌλ‘ 1.0.1
λ²μ μ μ€μΉνλ€λ κ²μ μμμ΅λλ€.
λ°λΌμ jasmine-reporters
μ΅μ λ²μ μ μ€μΉνλμ§ νμΈνμμμ€. μλ₯Ό λ€μ΄
npm install jasmine-reporters@~2.0.3 --save-dev
κ·Έ ν λ€μκ³Ό κ°μ΄ κ°λκΈ° ꡬμ±μ μ λ°μ΄νΈνμ΅λλ€.
var jasmineReporters = require('jasmine-reporters');
exports.config = {
framework: 'jasmine2',
//...
//Other configurations...
//...
onPrepare: function () {
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
savePath: '..',
consolidateAll: false
}));
},
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 60000,
print: function() {}
}
};
μ΄μ jasmine-reportersκ° μ μλν©λλ€.
jasmine2 νλ μμν¬λ‘ μ κ·Έλ μ΄λνκΈ° μν κ°λκΈ°μ λ¬Έμμμ κΈ°μ μΉμ μ @luixaviles λ΅λ³μ΄ λ¬Έμνλμ΄ μμΌλ©΄ μ’μ κ²μ λλ€. λλ jasmine2μ λν junit λ³΄κ³ μλ₯Ό μ»λ λ°©λ²μ μμλ΄λ λ° μ΄λ €μμ κ²ͺμ μ μΌν μ¬λμ΄λΌκ³ μμν μ μμ΅λλ€. λ¬Όλ‘ , μΌλ¨ μ΄κ²μ λ°κ²¬νκ³ νμ¬ λ¬Έμλ₯Ό λ€μ μ½μΌλ©΄ λ λͺ νν΄μ‘μ§λ§, μλ jasmine-reportersκ° jasmine2μμ (μ ν) μλνμ§ μμλ€λ μλ―Έλ‘ μλͺ» μ½μμ΅λλ€. μμ λ΅λ³μ΄λ jasmine-reporters' readmeμ λν λ§ν¬κ° μμΌλ©΄ μΌμ΄ μ’ λ μ¬μμ§ κ²μ λλ€.
μ¬μ€λ―Ό λ³΄κ³ μλ₯Ό μλ
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(μλ‘μ΄ jasmineReporters.JUnitXmlReporter('../TestReports/test', μ°Έ, μ°Έ));
μ μ€νλμμ§λ§ xml νμΌμ΄ μμ±λμ§ μμμ΅λλ€.
λλ https://github.com/angular/protractor/blob/master/spec/junitOutputConf.js μ λλ¬νλ €κ³ νμ§λ§ 404λ₯Ό μ 곡ν©λλ€.
@spatchamatla κ·νμ μμ λ [email protected] 리ν¬ν°(jasmineReporters.JUnitXmlReporter λ jasmine.JUnitXmlReporter)μ²λΌ 보μ΄λ κ²κ³Ό [email protected] ꡬ문(μμνλ μΈμ)μ μ΄μν μ‘°ν©μ μ¬μ©νκ³ μμ΅λλ€.
μ¬λ°λ₯Έ ꡬ문μ μ¬μ©νμ¬ λ¦¬ν¬ν°λ₯Ό λ§λ€κ³ λ λ§μ μ 보λ₯Ό μ»μ μ μλμ§ νμΈνμμμ€.
jasmine-reporters READMEμ μμ μμ μμ :
var junitReporter = new jasmineReporters.JUnitXmlReporter({
savePath: '../TestReports/test'
});
jasmine.getEnv().addReporter(junitReporter);
λ΄κ° μκ°νκΈ°μ '../TestReports/test' ν΄λκ° μλμ§ νμΈνμμμ€.
κ·Έκ²λ μ‘°μ©ν.
2015λ
4μ 15μΌ μμμΌ μ€ν 4μ 33λΆ, Ben Loveridge [email protected]
μΌλ€:
@spatchamatla https://github.com/spatchamatla κ·νμ μλ
[email protected] ꡬ문μ μ΄μν μ‘°ν©(μμνλ μΈμ)
[email protected] κΈ°μμ²λΌ 보μ΄λ κ²κ³Ό ν¨κ»
(jasmineReporters.JUnitXmlReporter λ jasmine.JUnitXmlReporter).μ¬λ°λ₯Έ ꡬ문μ μ¬μ©νμ¬ λ¦¬ν¬ν°λ₯Ό λ§λ€κ³ λ€μ κ²°κ³Όκ° λμ€λμ§ νμΈνμμμ€.
λ λμκ°.jasmine-reporters READMEμ μμ μμ μμ :
var junitReporter = μλ‘μ΄ jasmineReporters.JUnitXmlReporter({
savePath: '../TestReports/test'
});
jasmine.getEnv().addReporter(junitReporter);β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/angular/protractor/issues/60#issuecomment -93451490.
jasmine-reportersλ https://github.com/substack/node-mkdirp λ₯Ό μ¬μ©νμ¬ λλ ν 리λ₯Ό μμ±νλ €κ³ μλνμ§λ§ κ²°μ½ λμ μκ°μ μλλλ€.
@bloveridge @spenoir , λλ [email protected] λ‘ λ€μ΄κ·Έλ μ΄λνκ³ μλλ₯Ό μ¬μ©νμ΅λλ€
//For junit output reports
var reporters = require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then(function (caps) {
var browserName = caps.caps_.browserName.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = browserName + "-" + browserVersion + "-";
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('Protractor/TestReports', true, true, prePendStr));
});
μλνκΈ° μμνμ§λ§ μ μΌν λ¨μ μ νλ‘μ νΈ ν΄λκ° μλ ν λλ ν 리μ ν΄λλ₯Ό λ§λλ κ²μ λλ€. νλ‘μ νΈ ν΄λ κ²½λ‘λ₯Ό μ¬μ©νλ €κ³ μλνμ λ μ¬μ ν
κ²½κ³ : '../TestReports', 'CHROME-41.0.2272.118-TestImpersonationPage.xml'μ λν junit λ³΄κ³ μ μμ±μ μ€ν¨νμ΅λλ€. μμΈ:
Rhino μλ: Javaκ° μ μλμ§ μμμ΅λλ€.
PhantomJs μλ: μ°½μ΄ μ μλμ§ μμμ΅λλ€.
NodeJS μλ: EACCES, κΆν κ±°λΆ '/Users/TestReports'
λλ μλμΌλ‘ ν΄λλ₯Ό λ§λ€μκ³ μ¬μ ν μ½μμ μμ λ΄μ©μ 보μ¬μ€λλ€
'Protractor/TestReports'κ° μ¬λ°λ₯Έ κ²½λ‘μ΄κ³ ν΄λΉ ν΄λκ° μ‘΄μ¬ν©λκΉ?
2015λ
4μ 15μΌ μμμΌ μ€ν 5:01, spatchamatla [email protected]
μΌλ€:
@bloveridge https://github.com/bloveridge @spenoir
https://github.com/spenoir , λλ [email protected] λ‘ λ€μ΄κ·Έλ μ΄λνκ³
μλμμ μ¬μ©//junit μΆλ ₯ λ³΄κ³ μμ κ²½μ°
var κΈ°μ = require('jasmine-reporters');
var capsPromise = λΈλΌμ°μ .getCapabilities();
capsPromise.then(ν¨μ(λλ¬Έμ) {
var λΈλΌμ°μ μ΄λ¦ = caps.caps_.browserName.toUpperCase();
var λΈλΌμ°μ λ²μ = caps.caps_.version;
var prePendStr = λΈλΌμ°μ μ΄λ¦ + "-" + λΈλΌμ°μ λ²μ + "-";
jasmine.getEnv().addReporter(μλ‘μ΄ jasmine.JUnitXmlReporter('κ°λ/TestReports', true, true, prePendStr));
});μλνκΈ° μμνμ§λ§ μ μΌν λ¨μ μ μ§μ ν΄λλ₯Ό λ§λλ κ²μ λλ€.
νλ‘μ νΈ ν΄λκ° μλ λλ ν 리. λ΄κ° νλ‘μ νΈλ₯Ό μ¬μ©νλ €κ³ νμ λ
ν΄λ κ²½λ‘, μ¬μ νRhino μλ: Javaκ° μ μλμ§ μμμ΅λλ€.
PhantomJs μλ: μ°½μ΄ μ μλμ§ μμμ΅λλ€.
NodeJS μλ: path.resolveμ λν μΈμλ λ¬Έμμ΄μ΄μ΄μΌ ν©λλ€.λλ μλμΌλ‘ ν΄λλ₯Ό λ§λ€μκ³ μ¬μ ν μ½μμ μμ λ΄μ©μ 보μ¬μ€λλ€
β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/angular/protractor/issues/60#issuecomment -93460326.
'Protractor/TestReports'λ ν ν΄λμ μμ±λ κ²½λ‘μ λλ€.
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('../TestReports', true, true, prePendStr));
κ·Έλ¦¬κ³ λ΄κ° μλμΌλ‘ λ§λ
λ΄κ° ν
μ€νΈλ₯Ό μ€ννμ λ, κ·Έκ²μ μ¬μ ν ββββμ 곡ν©λλ€
κ²½κ³ : '../TestReports', 'CHROME-41.0.2272.118-TestImpersonationPage.xml'μ λν junit λ³΄κ³ μ μμ±μ μ€ν¨νμ΅λλ€. μμΈ:
Rhino μλ: Javaκ° μ μλμ§ μμμ΅λλ€.
PhantomJs μλ: μ°½μ΄ μ μλμ§ μμμ΅λλ€.
NodeJS μλ: EACCES, κΆν κ±°λΆ '/Users/TestReports'
TestReports ν΄λμ λν κΆνμ μνν μ μμ΅λλ€. νμ€νμ§ μμ
μ΄ν.
2015λ
4μ 15μΌ μμμΌ μ€ν 5:10, spatchamatla [email protected]
μΌλ€:
'Protractor/TestReports'λ ν ν΄λμ μμ±λ κ²½λ‘μ΄λ©°,
κ·Έλ λλ μ¬μ©νλ€jasmine.getEnv().addReporter(μλ‘μ΄ jasmine.JUnitXmlReporter('../TestReports', true, true, prePendStr));
κ·Έλ¦¬κ³ λ΄κ° μλμΌλ‘ λ§λ
[μ΄λ―Έμ§: μ€ν¬λ¦°μ· 2015-04-15 at 12 07 09 pm]
https://cloud.githubusercontent.com/assets/4671240/7163457/278cffa6-e368-11e4-9994-2c0b5d33f07c.pngλ΄κ° ν μ€νΈλ₯Ό μ€ννμ λ, κ·Έκ²μ μ¬μ ν ββββμ 곡ν©λλ€
κ²½κ³ : '../TestReports'μ λν junit λ³΄κ³ μ μμ±μ μ€ν¨νμ΅λλ€.
'CHROME-41.0.2272.118-TestImpersonationPage.xml'. μμΈ:
Rhino μλ: Javaκ° μ μλμ§ μμμ΅λλ€.
PhantomJs μλ: μ°½μ΄ μ μλμ§ μμμ΅λλ€.
NodeJS μλ: EACCES, κΆν κ±°λΆ '/Users/TestReports'β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/angular/protractor/issues/60#issuecomment -93466365.
λ¬Όλ‘ μ λλ€. @spenoir μ μ μκ³Ό μ견μ κ°μ¬λ립λλ€.
νλ₯ν μ€λ λ. λ§μ λμμ΄ λμμ΅λλ€.
λ¬Έμ κ° μλ€κ³ μκ°νμ§λ§ κ·Έλ μ§ μμ΅λλ€. μμ ν λ°©λ²μ μ°Ύμ μ μμ΅λλ€ :)
μ’μ μΌμ κ³μνμμμ€.
@jkmurthy @ksraja λμ΄λ jasmineReportsλ μ€μ λ‘ require ν¨μμ λ΄λ³΄λ΄κΈ°μΈ κ² κ°μ΅λλ€.
μλ₯Ό λ€μ΄,
var jasmineReporters = require('jasmine-reporters');
jasmine-reporters μΆκ° μ 보μ μκ° μ μκ² ν¨κ³Όμ μ λλ€: https://github.com/larrymyers/jasmine-reporters#protractor
μ½μ μΆλ ₯λ§ νμν κ²½μ° https://github.com/bcaudan/jasmine-spec-reporter/blob/master/docs/protractor-configuration.md μ λ§μ‘±νμ΅λλ€.
@josephdpurcell κ·νκ° μ 곡ν λ§ν¬λ μ μκ² ν¨κ³Όμ μ΄μμ΅λλ€. μ¬κΈ° λ΄ κ΅¬μ±μ΄ μμ΅λλ€. λμμ΄ λκΈΈ λ°λλλ€!
mkdirp ν¨ν€μ§μ λ€λ₯Έ jasmine 2.x λ° jasmine-reporters 2.X ν¨ν€μ§λ₯Ό μ€μΉνλμ§ νμΈνμμμ€.
μ΄ κ΅¬μ±μ ν΄λκ° μ‘΄μ¬νμ§ μλ κ²½μ° μλ μ€λ₯λ₯Ό λ°©μ§νκΈ° μν΄ ν΄λλ₯Ό μμ±ν©λλ€.
var folderName = ('output_folder');
var mkdirp = require('mkdirp');
mkdirp(folderName, function(err) {
if (err) {
console.error(err);
} else {
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
consolidateAll: true,
savePath: folderName,
filePrefix: 'xmloutput-'
}));
}
});
κ°μ₯ μ μ©ν λκΈ
κ΅¬μ± νμΌμμ μ΄ μμ μ μ½κ° ν΄νΉλ λ°©μμΌλ‘ μννλ λ°©λ² - μ λ Protractorμ μ체 ν μ€νΈ μ νκ΅°μΌλ‘ μ΄κ²μ ν μ€νΈνμ΅λλ€.
npm install jasmine-reporters
κ΅¬μ± νμΌ: