Отчет JSON не создается для неудачных сценариев с использованием транспортира

Если мои сценарии потерпели неудачу, отчет JSON не будет создан. Но для сценариев проходов я могу увидеть отчет JSON.

Пожалуйста, найдите мой файл конфигурации, как показано ниже.

введите здесь описание изображения

В консоли подсказки комментария я могу увидеть сообщение об ошибке:

W/launcher — игнорирование неперехваченной ошибки AssertionError: ожидаемое значение false равно true

E/launcher - ОШИБКА: программа запуска вышла с 1 оставшейся задачей


person KAK    schedule 01.06.2017    source источник
comment
Какую версию CucumberJS вы используете?   -  person wswebcreation    schedule 01.06.2017
comment
Я использую Cucumberjs v1.3.1 и Protractor v5.1.2.   -  person KAK    schedule 01.06.2017


Ответы (1)


Вы можете сохранить отчет с помощью хука, поэтому не создавайте файл из файла protractor.conf.js, а используйте для него хук-огурец.

Крюк может выглядеть так

reportHook.js:

const cucumber = require('cucumber');
const jsonFormatter = cucumber.Listener.JsonFormatter();
const fs = require('fs-extra');
const jsonFile = require('jsonfile');
const path = require('path');
const projectRoot = process.cwd();

module.exports = function reportHook() {
  this.registerListener(jsonFormatter);

  /**
   * Generate and save the report json files
   */
  jsonFormatter.log = function(report) {
    const jsonReport = JSON.parse(report);

    // Generate a featurename without spaces, we're gonna use it later
    const featureName = jsonReport[0].name.replace(/\s+/g, '_').replace(/\W/g, '').toLowerCase();

    // Here I defined a base path to which the jsons are written to
    const snapshotPath = path.join(projectRoot, '.tmp/json-output');

    // Think about a name for the json file. I now added a featurename (each feature
    // will output a file) and a timestamp (if you use multiple browsers each browser 
    // execute each feature file and generate a report)
    const filePath = path.join(snapshotPath, `report.${featureName}.${new Date}.json`);

    // Create the path if it doesn't exists
    fs.ensureDirSync(snapshotPath);

    // Save the json file
    jsonFile.writeFileSync(filePath, jsonReport, {
      spaces: 2
    });
  };
}

Вы можете сохранить этот код в файл reportHook.js, а затем добавить его в cucumberOpts:.require, чтобы он выглядел так в вашем коде.

cucumberOpts: {
  require: [
    '../step_definitions/*.json',
    '../setup/hooks.js',
    '../setup/reportHook.js'
  ],
  ....
}

Даже при неудачных шагах/сценариях он должен генерировать файл отчета.

Надеюсь, поможет

person wswebcreation    schedule 01.06.2017
comment
Эй, спасибо за помощь. Но я получаю сообщение Ошибка: ENOENT: нет такого файла или каталога, откройте 'C:\Users\....\Desktop\demo\.tmp\json-output\report.....json'< /b> сообщение об ошибке после добавления файла '../setup/reportHook.js'. Примечание. Сообщение об ошибке появляется перед выполнением сценариев. - person KAK; 01.06.2017
comment
Привет @KAK, извини, я сделал ошибку в коде, теперь хук должен быть правильным. У меня был оператор возврата, который мгновенно выполнял код - person wswebcreation; 01.06.2017
comment
Привет. Тем не менее я получаю сообщение об ошибке Ошибка: ENOENT, если я заменю путь к файлу существующим json, тогда он будет работать нормально. Но он работает только для пройденных сценариев, а для неудачных. Я думаю, что в моей базовой конфигурации есть какая-то проблема, и я поднял запрос как stackoverflow.com/questions/44310020/ - person KAK; 01.06.2017
comment
Это действительно странно, я сделал много реализаций CucumberJS с CucumberJs 1.x, а в настоящее время также с версией 2.x, и у меня нет никаких проблем. - person wswebcreation; 01.06.2017