diff --git a/.gitignore b/.gitignore index 43253f23283..d0a15316df7 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ network_closure.sh # Web UI www/master/node_modules/ + +# Karma output +www/test_out diff --git a/.travis.yml b/.travis.yml index b344953a872..aa76bc042d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,8 +21,12 @@ install: - GOPATH=$PWD/Godeps/_workspace:$GOPATH go install ./... - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/verify-gendocs.sh +before_script: + - npm install karma karma-junit-reporter karma-phantomjs-launcher karma-jasmine + script: - KUBE_RACE="-race" KUBE_COVER="y" KUBE_GOVERALLS_BIN="$HOME/gopath/bin/goveralls" KUBE_TIMEOUT='-timeout 300s' KUBE_COVERPROCS=8 KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS ./hack/test-go.sh -- -p=2 + - node_modules/karma/bin/karma start www/master/karma.conf.js --single-run --browsers PhantomJS - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH ./hack/test-cmd.sh - PATH=$HOME/gopath/bin:./third_party/etcd:$PATH KUBE_TEST_API_VERSIONS=$KUBE_TEST_API_VERSIONS KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=4 LOG_LEVEL=4 ./hack/test-integration.sh diff --git a/www/master/components/dashboard/test/controllers/header.spec.js b/www/master/components/dashboard/test/controllers/header.spec.js new file mode 100644 index 00000000000..de3905a35ec --- /dev/null +++ b/www/master/components/dashboard/test/controllers/header.spec.js @@ -0,0 +1,67 @@ +'use strict'; + +describe('header controller', function() { + beforeEach(module('kubernetesApp.components.dashboard')); + + beforeEach(inject(function($rootScope, $location, $controller) { + this.rootScope = $rootScope; + this.scope = $rootScope.$new(); + + this.location = $location; + spyOn(this.location, 'path'); + + this.controller = $controller; + this.ctrl = this.controller('HeaderCtrl', { + $scope: this.scope + }); + this.scope.$apply(); + })); + + describe('subPages', function() { + it('is defined', function() { + expect(this.scope.subPages).not.toBeUndefined(); + }); + + it('is an array', function() { + expect(Array.isArray(this.scope.subPages)).toBeTruthy(); + }); + + it('is not empty', function() { + expect(this.scope.subPages.length).toBeGreaterThan(0); + }); + + describe('each subPage', function() { + it('has a category', function() { + this.scope.subPages.forEach(function(subPage) { + expect(subPage.category).toBeTruthy(); + }); + }); + + it('has a name', function() { + this.scope.subPages.forEach(function(subPage) { + expect(subPage.name).toBeTruthy(); + }); + }); + + it('has a value', function() { + this.scope.subPages.forEach(function(subPage) { + expect(subPage.value).toBeTruthy(); + }); + }); + }); + }); + + describe('Pages', function() { + it('does not change location on first detected change', function() { + expect(this.location.path).not.toHaveBeenCalled(); + }); + + it('changes location on second detected change', function() { + var _this = this; + this.scope.$apply(function() { + _this.scope.Pages = 'test_Pages'; + }); + expect(this.location.path).toHaveBeenCalledWith('test_Pages'); + }); + }); +}); diff --git a/www/master/karma.conf.js b/www/master/karma.conf.js index 726a67ea063..af63c141d5f 100644 --- a/www/master/karma.conf.js +++ b/www/master/karma.conf.js @@ -27,7 +27,14 @@ module.exports = function(config) { browsers: ['Chrome'], - plugins: ['karma-chrome-launcher', 'karma-firefox-launcher', 'karma-jasmine', 'karma-junit-reporter'], + plugins: [ + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-jasmine', + 'karma-junit-reporter', + 'karma-story-reporter', + 'karma-phantomjs-launcher' + ], junitReporter: {outputFile: 'test_out/unit.xml', suite: 'unit'} diff --git a/www/master/package.json b/www/master/package.json index 4466e9c9ed7..d38b054526e 100644 --- a/www/master/package.json +++ b/www/master/package.json @@ -39,6 +39,7 @@ "karma-cli": "0.0.4", "karma-jasmine": "^0.1.5", "karma-junit-reporter": "^0.2.2", + "karma-story-reporter": "^0.3.1", "protractor": "^1.1.1", "shelljs": "^0.2.6", "through2": "^0.6.3",