Есть ли способ узнать, что nodeunit закончил все тесты?
Мне нужно запустить некоторый код после того, как nodeunit
успешно прошли все тесты.
Я тестирую некоторые Firebase
оболочки и Firebase
ссылочные блоки, выходящие из nodeunit после выполнения всех тестов.
Я ищу какой-нибудь крюк или обратный вызов для запуска после прохождения всех модульных тестов. Таким образом, я могу завершить Firebase
процесс, чтобы nodeunit
иметь возможность выйти.
4 ответа:
Не нашел правильного способа сделать это.
Есть мое временное Решение:
//Put a *LAST* test to clear all if needed: exports.last_test = function(test){ //do_clear_all_things_if_needed(); setTimeout(process.exit, 500); // exit in 500 milli-seconds test.done(); }
В моем случае это используется для того, чтобы убедиться, что соединение DB или какое-то сетевое соединение будет убито любым способом. Причина, по которой он работает, заключается в том, что nodeunit запускает тесты последовательно.
Это не лучший, даже не самый хороший способ, просто позволить тесту выйти.
For nodeunit 0.9.0
Для недавнего проекта мы подсчитывали тесты, повторяя
exports
, а затем вызывалиtearDown
для подсчета завершений. После завершения последнего теста мы вызвали process.выход().Смотрите спецификацию для получения полной информации. Обратите внимание, что это произошло в конце файла (после того, как все тесты были добавлены в экспорт)
(function(exports) { // firebase is holding open a socket connection // this just ends the process to terminate it var total = 0, expectCount = countTests(exports); exports.tearDown = function(done) { if( ++total === expectCount ) { setTimeout(function() { process.exit(); }, 500); } done(); }; function countTests(exports) { var count = 0; for(var key in exports) { if( key.match(/^test/) ) { count++; } } return count; } })(exports);
В соответствии с документами nodeunit я не могу найти способ обеспечить обратный вызов после выполнения всех тестов.
Я предлагаю использовать Grunt , чтобы создать тестовый рабочий процесс с задачами, например:
- установите средство командной строки:
npm install -g grunt-cli
- установите grunt в свой проект
npm install grunt --save-dev
- установите модуль nodeunit grunt:
npm install grunt-contrib-nodeunit --save-dev
Создайте файл Gruntfile.Яш следующим образом:
module.exports = function(grunt) { grunt.initConfig({ nodeunit : { all : ['tests/*.js'] //point to where your tests are } }); grunt.loadNpmTasks('grunt-contrib-nodeunit'); grunt.registerTask('test', [ 'nodeunit' ]); };
Создайте свою пользовательскую задачу, которая будет быть запущен после испытаний путем изменения хрюкать файла следующим образом:
module.exports = function(grunt) { grunt.initConfig({ nodeunit : { all : ['tests/*.js'] //point to where your tests are } }); grunt.loadNpmTasks('grunt-contrib-nodeunit'); //this is just an example you can do whatever you want grunt.registerTask('generate-build-json', 'Generates a build.json file containing date and time info of the build', function() { fs.writeFileSync('build.json', JSON.stringify({ platform: os.platform(), arch: os.arch(), timestamp: new Date().toISOString() }, null, 4)); grunt.log.writeln('File build.json created.'); }); grunt.registerTask('test', [ 'nodeunit', 'generate-build-json' ]); };
Выполните тестовые задания с помощью
grunt test
Я нашел другое решение, как справиться с этим решением. Я должен сказать, что все ответы здесь верны. Однако при проверке grunt я обнаружил, что Grunt запускает тесты nodeunit через reporter, и репортер предлагает опцию обратного вызова, когда все тесты закончены. Это можно было бы сделать примерно так:
В папке
test_scripts/ some_test.js
Тест.js может содержать что-то вроде этого:
//loads default reporter, but any other can be used var reporter = require('nodeunit').reporters.default; // safer exit, but process.exit(0) will do the same in most cases var exit = require('exit'); reporter.run(['test/basic.js'], null, function(){ console.log(' now the tests are finished'); exit(0); });
Скрипт можно добавить, скажем, в
package.json
Объект script"scripts": { "nodeunit": "node scripts/some_test.js", },
Теперь это можно сделать как
npm run nodeunit
Тесты в некоторых тестах.js может быть скован цепью или он может быть запущен один за другим с помощью npm