Grunt-mocha-test Репортер Xunit записывает весь вывод консоли в файл xunit

Я использую grunt-mocha-test для запуска наших тестов мокко. Я хочу иметь возможность запускать тесты и генерировать отчет xunit и получать покрытие (с помощью blanket.js). В моем файле grunt есть следующие разделы:

mochaTest: {
        'unit-jenkins': {
            options: {
                reporter: 'XUnit',
                require: paths.test + '/blanket',
                captureFile: paths.tmp + '/xunit.xml'
            },
            src: [paths.test + '/unit/**/*.js'],        
        },
        'integration-jenkins': {
            options: {
                reporter: 'XUnit',
                require: paths.test + '/blanket',
                captureFile: paths.tmp + '/xunit.xml'
            },
            src: [paths.test + '/integration/**/*.js']
        },
        coverage: {
            options: {
                reporter: 'html-cov',
                quiet: true,
                captureFile: paths.tmp + '/coverage.html'
            },
            src: [paths.test +  '/**/*.js']
        }
    },

и

    grunt.registerTask('test-jenkins', [
    'mochaTest:unit-jenkins',       // run unit tests
    'mochaTest:integration-jenkins',    // run unit tests
]);

когда я запускаю runt-jenkins, я вижу тестовый вывод и вывод xunit на консоли. Кроме того, создается файл xunit, однако он состоит из вывода тестов и вывода xunit, например:

[14:30:17.164Z] TRACE App: HTTP Response /versions
HTTP/1.1 200 OK
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 46
ETag: "-1409762768"
Date: Mon, 17 Feb 2014 14:30:17 GMT
Connection: close
<testsuite name="Mocha Tests" tests="1" failures="0" errors="0" skipped="0" timestamp="Mon, 17 Feb 2014 14:30:17 GMT" time="0.029">
<testcase classname="Application" name="should contain description of API versions" time="0.028"/>
</testsuite>

Как настроить grunt-mocha-test так, чтобы выходной файл xunit состоял исключительно из вывода xunit?

Ответ 1

У меня была такая же проблема с Selenium. Я обошел его со следующей задачей:

    var outputFile = process.env.MOCHA_OUTPUT_FILE || 'xunit_results.xml';
    grunt.registerTask('cleanXunitFile', 'Remove Selenium/WebDriver output from xunit file', function() {
        if (grunt.file.exists('./' + outputFile)) {
            var file = grunt.file.read('./' + outputFile); 
            if (file.indexOf("<testsuite")) {
                grunt.file.write('./' + outputFile, file.substring(file.indexOf("<testsuite")));
            }
        }
        else {
            grunt.log.error("'cleanXunitFile' task was specified but file " + outputFile + " does not exist.");
        }
    });

Ответ 2

Я вижу тестовый вывод и вывод xunit на консоли. Кроме того, создается файл xunit, однако он состоит из вывода тестов и вывода xunit

Я боюсь, что это ошибка в мокке.

Существует запрос на ожидание запроса, пытающийся решить эти проблемы, см. https://github.com/visionmedia/mocha/pull/1218