gulpとkarmaをグローバルでインストールします。
$ sudo npm install -g gulp karmaどうもkarmaにパスが通っていないようなので、パスを通しておきます。
$ sudo ln -s /usr/lib/node_modules/karma/bin/karma /usr/local/bin/karma(2014/05/23 追記: 上記、Ubuntu13.10上です。Macだと "/usr/local/lib/node_modules/karma/bin/karma" でした。)
必要なパッケージをローカルにインストールします。
$ mkdir xxx && cd xxx $ npm install --save-dev gulp gulp-util gulp-karma karma-jasmine karma-phantomjs-launcherpackage.json を自前で用意するなら、以下の様な感じになります。
{ "name": "gulp-karma", "version": "0.1.0", "devDependencies": { "gulp": "~3.*", "gulp-util": "~2.*", "gulp-karma": "~0.*", "karma-jasmine": "~0.*", "karma-phantomjs-launcher": "~0.*" } }angular.js本体と、angular-mocks.js をダウンロードしておきます。
https://github.com/angular/angular.js/blob/master/src/ngMock/angular-mocks.js
今回は
- ./vendor/angular.min.js
- ./vendor/angular-mocks.js
karmaの設定ファイルを作成します。以下、ブラウザを"Chrome"から"PhantomJS"に変えただけ(カーソルキーの上下で変えられました。)で、他はそのままです。
$ karma init Which testing framework do you want to use ? Press tab to list possible options. Enter to move to the next question. > jasmine Do you want to use Require.js ? This will add Require.js plugin. Press tab to list possible options. Enter to move to the next question. > no Do you want to capture any browsers automatically ? Press tab to list possible options. Enter empty string to move to the next question. > PhantomJS > What is the location of your source and test files ? You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js". Enter empty string to move to the next question. > Should any of the files included by the previous patterns be excluded ? You can use glob patterns, eg. "**/*.swp". Enter empty string to move to the next question. > Do you want Karma to watch all the files and run the tests on change ? Press tab to list possible options. > yes Config file generated at "xxx/gulp-karma/karma.conf.js".gulpfile.js を作成します。
var gulp = require('gulp'); var karma = require('gulp-karma'); gulp.task('karma', function () { var files = [ 'vendor/angular.min.js', 'vendor/angular-mocks.js', 'js/app.js', 'spec/appSpec.js', ]; gulp.src(files).pipe(karma({configFile: 'karma.conf.js'})); });テスト対象のjsファイルと、そのテスト(spec)のjsファイルを作成します。
$ mkdir js && mkdir specjs/app.js
var myApp = angular.module('myApp', []); myApp.filter('truncate', [function () { return function (text, length, end) { if (isNaN(length)) { length = 10; } if (end === void 0) { end = '...'; } if (text.length <= length) { return text; } return text.substring(0, length - end.length) + end; }; }]);spec/appSpec.js
describe('spec for popup.js', function() { beforeEach(function () { module('myApp'); }); it('should be truncated.', inject(function(truncateFilter) { expect(truncateFilter('1234567890')).toBe('1234567890'); expect(truncateFilter('12345678901')).toBe('1234567...'); expect(truncateFilter('1234567890', 4, '---')).toBe('1---'); expect(truncateFilter('1234567890', 2, '---')).toBe('---'); })); });テストを実行してみます。
$ gulp karma [gulp] Using gulpfile /share/gulp-karma/gulpfile.js [gulp] Starting 'karma'... [gulp] Finished 'karma' after 7.23 ms [gulp] Starting Karma server... INFO [karma]: Karma v0.12.1 server started at http://localhost:9876/ INFO [launcher]: Starting browser PhantomJS INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket 6KRg3iwj9PAR6jMwlCqC with id 13100382 PhantomJS 1.9.7 (Linux): Executed 1 of 1 SUCCESS (0.041 secs / 0.009 secs)試しに、テストを適当に書き換えて失敗させてみます。
$ gulp karma [gulp] Using gulpfile /share/gulp-karma/gulpfile.js [gulp] Starting 'karma'... [gulp] Finished 'karma' after 8.24 ms [gulp] Starting Karma server... INFO [karma]: Karma v0.12.1 server started at http://localhost:9876/ INFO [launcher]: Starting browser PhantomJS INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket pjHN4RaPeEbzGFrtlZ35 with id 28598103 PhantomJS 1.9.7 (Linux) spec for popup.js should be truncated. FAILED Expected '---' to be '1--'. PhantomJS 1.9.7 (Linux): Executed 1 of 1 (1 FAILED) ERROR (0.042 secs / 0.01 secs)とりあえず、これでテストできるかなー。という感じにはなった気がします。
jenkins ?
ReplyDeletehttp://karma-runner.github.io/0.8/plus/Jenkins-CI.html