Cucumber-js: рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ - рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЕрдХреНрддреВре░ 2012  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: cucumber/cucumber-js

рд░рд┐рдкреЛрд░реНрдЯ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд▓рдЖрдИ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рдЖрдЙрдЯрдкреБрдЯ" рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ JSON рдлреЙрд░реНрдореЗрдЯрд░ рд╕реАрдзреЗ STDOUT рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ (console.log рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдЕрдорд╛рдиреНрдп JSON рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд░реВрдмреА рдореЗрдВ рдХрдХрдбрд╝реА рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@cedriclombardot

1.5.0 рд╕реЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рд╕реЗ рдЬреЛрдВрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╣реБрдХ рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдПрдХ рд╕рд╛рде рд╕реБрдВрджрд░ рдФрд░ рдЬреЛрдВрд╕ рдлреЙрд░реНрдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ:

module.exports = function JsonOutputHook() {
  var Cucumber = require('cucumber');
  var JsonFormatter = Cucumber.Listener.JsonFormatter();
  var fs = require('fs');

  JsonFormatter.log = function (json) {
    fs.writeFile('test/e2e/output/cucumberReport.json', json, function (err) {
      if (err) throw err;
      console.log('json file location: test/e2e/output/cucumberReport.json');
    });
  };

  this.registerListener(JsonFormatter);
};

рд╕рднреА 29 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрджреЗ рд╣реИрдВ:

  1. рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдВ (рди рдХреЗрд╡рд▓ JSON рдмрд▓реНрдХрд┐ _pretty_, _progress_, _html_, рдЖрджрд┐) STDOUT рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ;
  2. рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдВред

рдореИрдВрдиреЗ рдПрдХрд╛рдзрд┐рдХ рд╕реНрд╡рд░реВрдкрдХреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИред

рдЬреВрд▓рд┐рдпрди рдХреНрдпрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЦрдмрд░ рд╣реИ рдХрд┐ рд╣рдо HTML рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХрдм рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рдкрд╛рдПрдВрдЧреЗ?

+1

+1

HI рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ JSON рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ Cucumber-json2report-master рдХреА рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ Cucumber.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рд░рди рдХреЗ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрдХрдбрд╝реА.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдиреНрдпреБрдЕрд▓ рдЪрд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣реИрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдпрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рд╕реБрдЭрд╛рд╡?

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

@letshaveyer рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЖрдк рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреНрдпреЛрдВ рдирд╣реАрдВ рднреЗрдЬрддреЗ?

рдЬрдм рддрдХ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рддрдм рддрдХ рдЖрдк json_formatter.js рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣реИрдХ рд╣реИ рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХ рдкреЗрд╕реНрдЯ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ред рд╣рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдореЗрдВ рдЯрд╛рдЗрдо рд╕реНрдЯреИрдореНрдк рднреА рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред

рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдореЗрдЯрд░рдЖрдИрдУ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рднреА рдмрджрд▓реЗрдВ

рд╡рд░ рдлрд╝реЙрд░реНрдореЗрдЯрд░рдЖрдИрдУ = {
рд▓рд┐рдЦреЗрдВ: рдлрд╝рдВрдХреНрд╢рди (рд╕реНрдЯреНрд░рд┐рдВрдЧ) {
рд╕реНрд╡рдпрдВ рд▓реЙрдЧ (рд╕реНрдЯреНрд░рд┐рдВрдЧ);
fs.writeFileSync('path\test_results.json', string); // рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
}
};

рдпреВрдирд┐рдХреНрд╕ рдФрд░ рдмреИрд╢ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдЗрдк рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рд╣реИ

cucumber-js --format=json | tee wow.json

+1 рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рд╣рдо рдЗрд╕реЗ рдкрд╛рдЗрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдо Cucumberjs рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдХреА рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рд╡рд┐рдХрд▓реНрдк

рдХрдХрдбрд╝реА рд╡рд┐рдХрд▓реНрдк: {
рдкреНрд░рд╛рд░реВрдк: 'JSON',
рдЯреИрдЧ: ' @testRun '
}

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреИрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдЪрд╛рдВрджрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

рдЪрдкрдЯреА рдХреАрд▓
5 рдЕрдЧрд╕реНрдд 2014 рдХреЛ рд╕реБрдмрд╣ 9:54 рдмрдЬреЗ, "рд╕реИрдо рд╕реИрдХреЛрди" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдЗрдк рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рд╣реИ

рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ --format=json | рдЯреА рд╡рд╛рд╣редрдЬреЗрд╕рди

+1 рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/cucumber/cucumber-js/issues/90#issuecomment -51199997ред

рджрд┐рд▓рдЪрд╕реНрдк @ brad8118 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣

рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдХрдХрдбрд╝реА рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдЬреЛ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЦреАрд░рд╛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИред

рд╡реЗ рдореЗрд░реЗ рд╢реБрд░реБрдЖрддреА рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдХрдХрдбрд╝реА lib рдХреЗ рдлреАрдЪрд░ рд░реЗрдВрдЧрдиреЗ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@ brad8118 рдореИрдВ рдЪрд╛рдВрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЧрдбрд╝рдмрдбрд╝рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рдпрд╛ рд╕рдорд░реНрдерди рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ?

var formatterIo = {
write: function(string){
self.log(string);
fs.writeFileSync('path\test_results.json', string); // added
}
};

@samccone рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рджреЗрд╢реА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЬреИрд╕реНрдореАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬреИрд╕реНрдореАрди рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреАред рдпрджрд┐ рдЖрдк рдХрдХрдбрд╝реА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрдХрдбрд╝реА.рдЬреЗрдПрд╕ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

@ jlin412 , рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрдХрдбрд╝реА рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдЬреЛрдВрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рдХреНрд▓реАрдирдЕрдк рдлрдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ 1 рдпрд╛ 0 рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред

// ----- The cleanup step -----
//
// A callback function called once the tests have finished running and
// the webdriver instance has been shut down. It is passed the exit code
// (0 if the tests passed or 1 if not).
onCleanUp: function () {}

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рдВрдЯреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред nicolassenechal@b337b18

@ jlin412 рдЬрдм рдЖрдк рдкреНрдпрд╛рд░рд╛ рдФрд░

@ brad8118 рдореИрдВ рдЬреЗрд╕рди рдЖрдЙрдЯрдкреБрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреНрд░рдВрдЯ рдЯрд╛рд╕реНрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:

  grunt.registerTask('jsonOutput', function () {
    var testOutput = grunt.file.read('test/e2e/tmp/cucumberOutput.json');
    var json = testOutput.match(/(\[\s+\{[\s\S]*\}\s+\]\s+\}\s+\]\s+\}\s+\])/)[1];
    grunt.file.write('test/e2e/output/cucumberReport.json', json);
  });

рдлрд┐рд░ рдореИрдВ рдПрдЪрдЯреАрдПрдордПрд▓ (рдПрдХ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХрдбрд╝реА рд╕реИрдВрдбрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
http://www.farooqyousuf.net/2013/12/generating-reports-with-cucumber-sandwich/

рдореИрдВрдиреЗ рдХрдХрдбрд╝реА рд╕реИрдВрдбрд╡рд┐рдЪ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдВрд╢реЛрдзрди рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдВрдЧ рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХреВрдВред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдмрд╕ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рдпрд╣ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдорд╛рд╕реНрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореБрдЭреЗ рдЕрдм рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╢рд╛рдЦрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдХрдм рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рдЗрд╕ рдмреАрдЪ рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж, рдлреНрд░реЗрдЬрд░ред

+1 - рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдкрд╛рдЧрд▓ рдЕрдВрддрд░реНрд╡рд┐рд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдХрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ рдЬрдм рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдлрд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрдирд╛ рдлреАрдЪрд░ рд░реЗрдВрдЧрдирд╛ рдХреНрдпреЛрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдХрдХрдбрд╝реА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдореЗрдВ рдмрдбрд╝реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЦреАрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛...

рдирдорд╕реНрддреЗ,

рдХреЛрдИ рднреА рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдареАрдХ рд╕реЗ рдЬреЗрд╕рди рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдореИрдВ рдШреВрдВрдЯ+рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░+рдЦреАрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж

@cedriclombardot

1.5.0 рд╕реЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рд╕реЗ рдЬреЛрдВрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╣реБрдХ рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдПрдХ рд╕рд╛рде рд╕реБрдВрджрд░ рдФрд░ рдЬреЛрдВрд╕ рдлреЙрд░реНрдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ:

module.exports = function JsonOutputHook() {
  var Cucumber = require('cucumber');
  var JsonFormatter = Cucumber.Listener.JsonFormatter();
  var fs = require('fs');

  JsonFormatter.log = function (json) {
    fs.writeFile('test/e2e/output/cucumberReport.json', json, function (err) {
      if (err) throw err;
      console.log('json file location: test/e2e/output/cucumberReport.json');
    });
  };

  this.registerListener(JsonFormatter);
};

рдореИрдВрдиреЗ resultJsonOutputFile рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдЬрд╛рджреБрдИ рдФрд░ рддреИрдпрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдПрдХреНрд╕рдПрдордПрд▓ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП: https://www.npmjs.com/package/protractor-cucumber-junit

рд╕рд┐рдбрд░рд┐рдХ

2015-01-02 18:34 рдЬреАрдПрдордЯреА+01:00 рдЬреЗрд╕рди рд▓рд┐рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com :

@cedriclombardot https://github.com/cedriclombardot

рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рд╕реЗ рдЬреЗрд╕рди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ
1.5.0 рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╣реБрдХ рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рдореИрдВ рдПрдХ рд╕рд╛рде рд╕реБрдВрджрд░ рдФрд░ рдЬреЛрдВрд╕ рдлреЙрд░реНрдореЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреВрдВ:

рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯреНрд╕ = рдлрд╝рдВрдХреНрд╢рди JsonOutputHook () {
рд╡рд░ рдХрдХрдбрд╝реА = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдЦреАрд░рд╛');
рд╡рд░ JsonFormatter = Cucumber.Listener.JsonFormatter ();
рд╡рд░ рдПрдлрдПрд╕ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдПрдлрдПрд╕');

JsonFormatter.log = рдлрд╝рдВрдХреНрд╢рди (рдЬреЗрд╕рди) {
fs.writeFile('test/e2e/output/cucumberReport.json', json, function (err) {
рдЕрдЧрд░ (рдЧрд▓рддреА) рдЧрд▓рддреА рдлреЗрдВрдХ;
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдЬреЗрд╕рди рдлрд╛рдЗрд▓ рд▓реЛрдХреЗрд╢рди: рдЯреЗрд╕реНрдЯ/рдИ2рдИ/рдЖрдЙрдЯрдкреБрдЯ/рдХрдХрдбрд╝реА рд░рд┐рдкреЛрд░реНрдЯ.рдЬреЗрд╕рди');
});
};

this.registerListener (JsonFormatter);
};

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/cucumber/cucumber-js/issues/90#issuecomment -68544890ред

+1

рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрдм рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдЧрд╛? рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдХрдбрд╝реАрдЬ рдорд╛рдЗрдирд╕ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реЗрд▓реЗрдирд┐рдпрдо рд╕реНрдЯрд╛рдЗрд▓ рд╡реЗрдм рдЯреЗрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╕реНрд╡рд░реВрдкрд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХрдбрд╝реАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди? рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░-рдХрдХрдбрд╝реА (рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ) рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

рдХрдХрдбрд╝реАрдЬ -> рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░рд┐рдпреЛ

+1

рдореИрдВ Cucumberjs json рдлреЙрд░реНрдореЗрдЯ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реВрдВред

https://github.com/mrooding/gulp-protractor-cucumber-html-report# Saving -cucumberjs-json-to-disk-when-using-protractor

  1. CucumberJS JSON рдлреЙрд░реНрдореЗрдЯрд░ рдореЗрдВ рд╢реНрд░реЛрддрд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ
  2. protractor.conf.js рд╣реБрдХ рд╢реНрд░реЛрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ

рдпрд╣ рдХрд╛рдо рд╣реИ

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдХрдХрдбрд╝реА рдЬреЗрдПрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдХрд╛рд░рдг рдЦреБрд╢ рдШрдВрдЯреЗ рдпрд╛рдж рдЖ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдХрдбрд╝реА-рдПрдЪрдЯреАрдПрдордПрд▓-рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

  1. рдЕрдкрдиреЗ рд╣реБрдХ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВредрдЬреЗрдПрд╕
support.registerHandler('AfterFeatures', () => {
    ///* creates report
    var options = {
        theme: 'bootstrap',
        jsonFile: 'cucumberReports/report.json',
        output: 'cucumberReports/report.html',
        reportSuiteAsScenarios: true,
        launchReport: true,
        metadata: {
            "App Version":"0.3.2",
            "Test Environment": "POC",
            //"Browser": "Chrome  54.0.2840.98",
            //"Platform": "Windows 10",
            //"Parallel": "Scenarios",
            //"Executed": "Remote"
        }
      };

    reporter.generate(options);
  });

рдЕрдкрдиреЗ protractor.conf.cucumberOpts рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
format: 'json:cucumberReports/report.json',

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Niceplace picture Niceplace  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

travi picture travi  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bmsoko picture bmsoko  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

edwinwright picture edwinwright  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jechazelle picture jechazelle  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ