2016-12-29 2 views
1

Поэтому мне пришлось существенно переписать инструмент отчетности, который я использовал для отчетов HTML для тестов Protractor/Jasmine E2E. Сейчас я могу хорошо писать в файл все результаты теста для запуска одного тестового файла (например, test1.spec.js).Как узнать, когда протрактор/жасмин закончены? (Логика инструмента отчетности)

Моя проблема возникает, когда я запускаю несколько файлов за раз (например, ['./test1.spec.js', './test2.spec.js']). В идеале, что я хотел бы сделать, это сохранить всю информацию из обоих тестов в объект, который, скажем, fileData, и затем записать эту переменную в файл после завершения всех тестовых файлов.

Я пробовал писать в функции jasmineDone, но это происходит после завершения каждого тестового файла, так что он либо дублирует информацию, которую я получаю из отчета, либо перезаписывает/испортил стилизацию отчета.

this.jasmineDone = function() { 
    fileData += styles.closeReportTags; 
    fileData += styles.closeBodyHtmlTag; 
    fs.appendFileSync("C:/Reports/testing1.html", fileData); 
} 

Я также создал метод afterLaunch определен в моем файле транспортир конфигурации, и используется в файле инструмента отчетности как таковой:

this.afterLaunch = function (callback) { 
    fs.writeFile("C:/Reports/testing1.html", fileData); 
} 

Выше я попытался приложить все результаты тестирования в переменную fileData на каждом прогоне, а затем просто записать все обратно после ее завершения, но fileData, похоже, не передается должным образом методу afterLaunch (он ничего не пишет в файл, просто создает пустой html-файл).

Итак, мой вопрос: каким образом я могу сохранить счетчик или флаг, чтобы определить, есть ли больше тестовых файлов в очереди на транспортир/жасмин, чтобы выяснить, когда фактический тестовый прогон полный и в какой области я могу использовать это, чтобы затем написать мой файл.

Спасибо.

ответ

1

У меня была та же проблема. В конечном счете, все крючки, доступные в Jasmine/Protractor, были недостаточно хороши (особенно, если вы ошпариваете тесты). То, что в конечном итоге работало для меня, создало мой собственный кли, разбору/сохранению результатов, которые я хотел, и , затем, делая отчетность.

Вот пример кли:

#!/usr/bin/env node 

var spawn = require('child_process').spawn; 
var output = []; 

// get protractor args from cli, and skip first two (node and self) 
var args = process.argv.slice(2); 
// run protractor 
protractor = spawn('node_modules/.bin/protractor', args); 

/** 
* process listeners 
*/ 
protractor.stdout.on('data', function(buffer) { 
    var text = buffer.toString(); 
    // parse results here... 
    console.log(text); 
}); 

protractor.stderr.on('data', function(buffer) { 
    var text = buffer.toString(); 
    console.log(text); 
}); 

protractor.on('exit', function(status) { 
    // protractor is _done_ done, report your results here... 
}); 

Убедитесь, что CHMOD файл исполняемым (например chmod 755.). Затем запустите его таким образом:

./myCI conf.js --baseUrl http://example.com

+0

я на самом деле понял, что-то, что работал с моим текущим решением, но я все еще планирую глядя в свой путь! Оцените ответ. Это была огромная головная боль ха-ха. –

+0

Не беспокойтесь. Да, это боль ... – Brine

Смежные вопросы