Отладка тестов жасминового узла с помощью инспектора узлов

Кто-нибудь знает, возможно ли это? Похоже, что большая часть примера для инспектора узлов предназначена для отладки вызванной веб-страницы. Однако я хотел бы иметь возможность отлаживать тесты jasmine-node.


person j03m    schedule 28.05.2011    source источник


Ответы (3)


Короче говоря, просто отлаживайте jasmine-node:

node --debug-brk node_modules/jasmine-node/lib/jasmine-node/cli.js spec/my_spec.js

Если вы посмотрите на исходный код сценария jasmine-node, он просто вызывает cli.js, и я обнаружил, что могу отлично отлаживать этот сценарий.

Я хотел использовать инспектор узлов для отладки теста CoffeeScript. Просто добавление переключателя --coffee работало хорошо, например.

node --debug-brk node_modules/jasmine-node/lib/jasmine-node/cli.js --coffee spec/my_spec.coffee
person Ian    schedule 26.02.2013
comment
На самом деле, это работает нормально. Просто нажмите кнопку «Возобновить выполнение скрипта» после загрузки отладчика. Это приведет вас к первой точке останова. Я не уверен, почему вместо этого завершились мои первые тесты. - person Rich Apodaca; 17.08.2013
comment
важно НЕ указывать параметр командной строки --autotest, потому что он заставляет jasmine-node создавать дочерние процессы, которые по умолчанию не подлежат отладке, без этого параметра он работает хорошо - person xorcus; 02.02.2015
comment
если это поможет другим - я думаю, с обновленным инспектором узлов: node-debug /usr/local/lib/node_modules/jasmine-node/lib/jasmine-node/cli.js spec/ - person rob_james; 23.04.2015
comment
На момент моего комментария это работает node --inspect --debug-brk -i ./node_modules/jasmine-node/lib/jasmine-node/cli.js test-jasmine/, поскольку @xorcus упомянул, что вы не можете использовать --autotest. - person Jerinaw; 20.07.2017

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

require('tty').setRawMode(true);
var stdin = process.openStdin();

exports.toggle = function(fireThis)
{
    if (process.argv.indexOf("debug")!=-1)
    {
        console.log("debug flag found, press any key to start or rerun. Press 'ctrl-c' to cancel out!");
        stdin.on('keypress', function (chunk, key) {
            if (key.name == 'c' && key.ctrl == true)
            {
                process.exit();
            }
            fireThis();
        });
    }
    else
    {
        console.log("Running, press any key to rerun or ctrl-c to exit.");
        fireThis();
        stdin.on('keypress', function (chunk, key) {
            if (key.name == 'c' && key.ctrl == true)
            {
                process.exit();
            }
            fireThis();
        });



    }
}

Вы можете добавить его в свои модульные тесты, например:

var toggle = require('./toggle');

toggle.toggle(function(){

    var vows = require('vows'),
    assert = require('assert');

    vows.describe('Redis Mass Data Storage').addBatch({

....

А затем запустите свои тесты, например: node --debug myfile.js debug. Если вы запустите переключатель отладки, он будет ждать, пока вы не нажмете что-нибудь, кроме Ctrl-C. Ctrl-c выходит. Вы также можете перезапустить, что приятно.

w0000t.

person j03m    schedule 05.10.2011

Мое необоснованное предположение заключается в том, что вам нужно будет исправить жасмин, я полагаю, что он порождает новый процесс узла или что-то в этом роде при запуске тестов, и эти новые процессы должны быть включены для отладки.

У меня было похожее желание, и мне удалось заставить работать экспресс, используя Eclipse в качестве отладчика: http://groups.google.com/group/nodejs/browse_thread/thread/af35b025eb801f43

…но я понял: если мне нужно пройтись по коду, чтобы понять его, мне, вероятно, потребуется рефакторинг кода (вероятно, чтобы сделать его более тестируемым) или разбить тесты на более мелкие блоки.

Ваши тесты — это ваш отладчик.

person timoxley    schedule 26.07.2011
comment
Видимо неправда. Смотрите ответ Яна. - person Rich Apodaca; 17.08.2013
comment
Я также считаю, что инспектор узлов не работает с jasmine-node, потому что jasmine-node порождает дочерние процессы, а инспектор узлов с этим не справляется. Поиск решения дает подсказку, что для process.debug_port должно быть установлено уникальное значение для каждого дочернего процесса, но это требует вмешательства в исходный код jasmine-node, я думаю - person xorcus; 02.02.2015