Как протестировать приложение AngularJS/SocketStream/Node.js с помощью Karma

Я работаю над приложением AngularJS, которое поставляется сервером SocketStream/node.js. У меня есть служба AngularJS, которая вызывает функции API на сервере SocketStream, и прогресс пока был хорошим.

Но теперь пришло время начать писать первые тесты, и первым, что пришло в голову, является Karma/Jasmine, так как это рекомендуемая установка AngularJS.

Пока все хорошо, но так как мои модули AngularJS импортируются с использованием 'require' (версия SocketStream, not require.js), а вызовы API сервера являются частью теста, мне нужно настроить Karma для загрузки SocketStream (по крайней мере, на его стороне клиента),

Я внимательно посмотрел на " https://github.com/yiwang/angular-phonecat-livescript-socketstream", но при запуске этого примера я получаю ошибки времени выполнения, возможно, из-за того, что у меня установлены более поздние версии различных зависимостей.

Мне удалось решить "требуемый", упаковав мое приложение SocketStream, добавив "ss.client.packAssets()" в app.js и запустив "SS_PACK=1 узел app.js", но когда я запускаю карму, он записывает сообщение об ошибке говоря:

'Chrome 23.0 (Linux) ERROR
    Uncaught TypeError: undefined is not a function
    at /the...path/client/static/assets/app/1368026081351.js:25'

'1368026081351.js' - это файл упакованных ресурсов SocketStream. Если я не загружаю его, сообщение об ошибке выглядит как "require is undefined", поэтому я думаю, что ошибка происходит где-то внутри SocketStream, где требуется код. Кроме того, потому что я запускаю карму в режиме отладки и вижу все обслуживаемые файлы.

Я пробовал разные подходы, чтобы выяснить, что происходит, но сейчас безрезультатно. Итак, мои вопросы:

Кто-нибудь еще успешно тестирует AngularJS / SocketStream, используя Karma? У кого-нибудь есть какие-либо предложения относительно того, как я могу исправить или хотя бы устранить эту проблему? Есть ли альтернативы / лучшие решения?

1 ответ

Время ответить, вроде, на мой собственный вопрос:

Вроде того, потому что я пришел к выводу, что Karma и node.js / SocketStream имеют много совпадений, поэтому я решил посмотреть, смогу ли я вообще опустить Karma и поставить платформу тестирования Jasmine через SocketStream. Оказывается, это возможно, и вот как я это сделал:

Я определил новый маршрут и клиент SocketStream в моем файле app.js:

ss.client.define( 'test', {
    view: 'SpecRunner.html',
    css:  ['libs/test'],
    code: ['libs', 'tests', 'app'],
    tmpl: 'none'
});

ss.http.route( '/test', function(req, res) {
    res.serveClient( 'test' );
});

Я скачал jasmine-standalone-1.3.1.zip и скопировал "SpecRunner.html" в папку "client/views". Затем я отредактировал его, чтобы он загружал AngularJS и все клиентские файлы SocketStream, как и все другие представления:

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular-resource.min.js"></script>
<SocketStream/>

Я удалил теги 'script', которые импортируют исходные файлы примеров ('Player.js' и 'Song.js') и спецификации, но оставил последний блок 'script' на месте без изменений.

Затем я создал новую папку внутри "client/css/libs" под названием "test" и скопировал туда "jasmine.css" без изменений.

Затем я скопировал "jasmine.js" и "jasmine-html.js", переименованные в "01-jasmine.js" и "02-jasmine-html.js", но без изменений, в "/client/code/libs".

Теперь Жасмин на месте и будет вызываться по маршруту /test. Немного неудовлетворительно то, что я не нашел элегантного места для хранения своих спецификаций. Пока они работают, только если я помещу их в папку "libs". Где-нибудь еще, и они обслуживаются SocketStream как модули и не запускаются.

Но я могу жить с этим сейчас. Я могу запустить тесты Jasmine без необходимости настраивать специальную настройку Karma.

Другие вопросы по тегам