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

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

I am using this code to generate json, but cucumber steps are not updating the pass fail status.

Though the test case got failed it shows result as Pass. And json is also not getting updated though I am adding a hook after execution.

Please help me so I can run cucumber-js with protractor to get json. I want to generate correct report.

This is my scenario: Login successful with valid account

Given I go on "http://store.demoqa.com/products-page/your-account/"
When I input user and password
Then I should see "Logout" link

Step definition file

'use strict';

var myStepDefinitionsWrapper = function () {
    var chai = require('chai');
    var chaiAsPromised = require('chai-as-promised');
    chai.use(chaiAsPromised);
    var expect = chai.expect;

    this.Given(/^I go on "([^"]*)"$/,{timeout: 60 * 1000},function (arg1) {
        browser.driver.get(arg1);
        browser.manage().timeouts().pageLoadTimeout(10000);
    });

    this.When(/^I input user and password$/,{timeout: 60 * 1000}, function (callback) {
        console.log("000000000000");
        browser.sleep(5000);
        browser.wait(function() {
          var login = by.id('log');
            return browser.driver.isElementPresent(login);
        }, 30000);
        browser.driver.findElement(by.id('log')).sendKeys("pratand");
        browser.driver.findElement(by.id('pwd')).sendKeys("cygent@india11");
        browser.driver.findElement(by.id('login')).click();
        callback();
    });

    this.Then(/^I should see "([^"]*)" link$/,{timeout: 60 * 1000},function (arg1,callback) {
        var logoutpath = by.xpath('//div[@id="account_logout"]/a');
        browser.wait(function() {
            return browser.driver.isElementPresent(logoutpath);
        }, 30000);
        expect(browser.driver.findElement(logoutpath).getText()).to.eventually.equal(arg1).and.notify(callback());
        // expect(true).toEqual(true);
        browser.driver.isElementPresent(logoutpath).then(function(isPresent){
            browser.driver.findElement(logoutpath).then(function(start){
                start.click();
            });
        });
    });
};
module.exports = myStepDefinitionsWrapper;
Peter B
  • 22,460
  • 5
  • 32
  • 69
prat meh
  • 31
  • 1

1 Answers1

1

Try to set it in configuration file :

cucumberOpts: {
    format: 'json:e2e-reports/json/results.json',}

And create such as directory for saving json :

beforeLaunch: () => {
    const jsonReports = path.join(process.cwd(), '/e2e-reports/json');
    const htmlReports = path.join(process.cwd(), '/e2e-reports/html');
    if (!fs.existsSync(jsonReports)) {
       mkdirp.sync(jsonReports);
    }
    if (!fs.existsSync(htmlReports)) {
       mkdirp.sync(htmlReports);
    }
}
Peter B
  • 22,460
  • 5
  • 32
  • 69
LudmilaN
  • 124
  • 1
  • 3