2015-06-10 4 views
0

Я пытаюсь использовать Karma, чтобы протестировать простой скрипт, который использует d3.js, чтобы нарисовать диаграмму. Сценарий использует browserify для импорта d3.Тестирование javascript с помощью d3 с кармой

var d3 = require('d3'); 
// Some code... 

Я настроил Karma использовать browserify и PhantomJS запускать тесты против этого файла, однако независимо от конфигурации он всегда терпит неудачу с этой ошибкой:

PhantomJS 1.9.8 (Mac OS X 0.0.0) ERROR 
TypeError: 'null' is not an object (evaluating 'node.getAttribute') 

Я попытался с помощью browserify-shim но это сделано не разница. Вот отрывок из моей karma.conf.js:

frameworks: ['browserify', 'mocha'], 

files: [ 
    'src/static/js/*.js', 
    'test/js/*.js' 
], 

preprocessors: { 
    'src/static/js/*.js': ['browserify'], 
    'test/js/*.js': ['browserify'] 
}, 

browserify: { 
    debug: true, 
    transform: ['debowerify', 'browserify-shim'] 
}, 

browsers: ['PhantomJS'] 

Любая помощь в решении этой проблемы было бы весьма признателен. Просто для уточнения, фактический код работает нормально, только через Karma он сломается.

ответ

0

Проблема заключалась в том, что скрипт, который я пытался проверить, загружался в конце HTML body и автоматически запускал функцию с использованием d3. Когда пробежал Karma, он ввел скрипт до, загрузился DOM, что привело к ошибке d3, поскольку он ожидал существования элемента DOM.

Исправление было удалить вызов функции из сценария и добавить его в конце моей HTML body:

<body> 
    <!-- HTML code --> 
    <script> 
     myFunction(); 
    </script> 
</body> 

С browserify делает вещи неудобно, вы также должны прикрепить функцию к объекту окна в порядке называть его из-за пределов сценария:

window.myFunction = function() { 
    // code 
} 

Это работает как в браузере, так и в Карма.