Как протестировать приложение 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.