From c6549f4aca317d8684a9999596d8825710d3aa6a Mon Sep 17 00:00:00 2001 From: Joe Fiorini Date: Wed, 8 Jul 2015 15:38:58 -0400 Subject: [PATCH] Allow tests to run in Phantom via testem for CI --- Makefile | 5 +- .../unit/directives/job-status-graph-test.js | 2 - .../multi-select-list.directive-test.js | 1 - .../select-all.directive-test.js | 2 - .../services/job-status-graph-data-test.js | 2 - awx/ui/tests/unit/setup-browser.js | 90 +++++++++++-------- testem.yml | 25 +++--- 7 files changed, 71 insertions(+), 56 deletions(-) diff --git a/Makefile b/Makefile index f3ae843b39..5f245be131 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ SITELIB=$(shell $(PYTHON) -c "from distutils.sysconfig import get_python_lib; pr OFFICIAL ?= no PACKER ?= packer GRUNT ?= $(shell [ -t 0 ] && echo "grunt" || echo "grunt --no-color") +TESTEM ?= ./node_modules/.bin/testem BROCCOLI ?= ./node_modules/.bin/broccoli NODE ?= node @@ -293,8 +294,8 @@ reports/ui_code: node_modules clean-ui Brocfile.js bower.json Gruntfile.js $(BROCCOLI) build reports/ui_code -- --no-concat --no-tests --no-styles --no-sourcemaps # Run UI unit tests -test_ui: node_modules minjs_ci Gruntfile.js - $(GRUNT) karma:ci +test_ui: node_modules minjs_ci + $(TESTEM) ci --file testem.yml -R xunit # Run API unit tests across multiple Python/Django versions with Tox. test_tox: diff --git a/awx/ui/tests/unit/directives/job-status-graph-test.js b/awx/ui/tests/unit/directives/job-status-graph-test.js index 9af4db4909..0ea4c1265f 100644 --- a/awx/ui/tests/unit/directives/job-status-graph-test.js +++ b/awx/ui/tests/unit/directives/job-status-graph-test.js @@ -7,8 +7,6 @@ import 'tower/shared/Utilities'; import 'tower/shared/RestServices'; import JobStatusGraph from 'tower/dashboard/graphs/job-status/main'; -var sinon = require('sinon'); - var resizeHandler = sinon.spy(); window.$.fn.removeResize = angular.noop; diff --git a/awx/ui/tests/unit/multi-select-list/multi-select-list.directive-test.js b/awx/ui/tests/unit/multi-select-list/multi-select-list.directive-test.js index c1c052dfd3..debd765b1a 100644 --- a/awx/ui/tests/unit/multi-select-list/multi-select-list.directive-test.js +++ b/awx/ui/tests/unit/multi-select-list/multi-select-list.directive-test.js @@ -2,7 +2,6 @@ import '../setup-browser'; import {describeModule} from '../describe-module'; import mod from 'tower/shared/multi-select-list/main'; -var sinon = require('sinon'); describeModule(mod.name) .testDirective('multiSelectList', function(test) { diff --git a/awx/ui/tests/unit/multi-select-list/select-all.directive-test.js b/awx/ui/tests/unit/multi-select-list/select-all.directive-test.js index eef6adbd08..9f080cc494 100644 --- a/awx/ui/tests/unit/multi-select-list/select-all.directive-test.js +++ b/awx/ui/tests/unit/multi-select-list/select-all.directive-test.js @@ -3,8 +3,6 @@ import '../setup-browser'; import {describeModule} from '../describe-module'; import mod from 'tower/shared/multi-select-list/main'; -var sinon = require('sinon'); - var mockController = { selectAll: sinon.spy(), deselectAll: sinon.spy(), diff --git a/awx/ui/tests/unit/services/job-status-graph-data-test.js b/awx/ui/tests/unit/services/job-status-graph-data-test.js index ea4af28a69..d5121cbdcb 100644 --- a/awx/ui/tests/unit/services/job-status-graph-data-test.js +++ b/awx/ui/tests/unit/services/job-status-graph-data-test.js @@ -3,8 +3,6 @@ import '../setup-browser'; import {describeModule} from '../describe-module'; import JobStatusGraph from 'tower/dashboard/graphs/job-status/main'; -var sinon = require('sinon'); - var processErrors = sinon.spy(); describeModule(JobStatusGraph.name) diff --git a/awx/ui/tests/unit/setup-browser.js b/awx/ui/tests/unit/setup-browser.js index a7cc84232f..a2b3c3db85 100644 --- a/awx/ui/tests/unit/setup-browser.js +++ b/awx/ui/tests/unit/setup-browser.js @@ -1,52 +1,68 @@ /* jshint node: true */ -var jsdom = require('jsdom').jsdom; -var document = jsdom('tower'); -var window = document.parentWindow; -var mocha = require('mocha'); -window.mocha = mocha; -window.beforeEach = beforeEach; -window.afterEach = afterEach; +(function() { + var isNode = typeof window === 'undefined'; -global.document = document; -global.window = window; + if (!isNode) { + window.expect = chai.expect; + return; + } -var jquery = require('jquery'); -global.$ = window.$ = global.jQuery = window.jQuery = jquery; + setupNode(); -require('angular/angular'); + function setupNode() { -require('angular-mocks/angular-mocks'); + var jsdom = require('jsdom').jsdom; + var document = jsdom('tower'); + var window = document.parentWindow; + var mocha = require('mocha'); + window.mocha = mocha; + window.beforeEach = beforeEach; + window.afterEach = afterEach; -var chai = require('chai'); -var expect = chai.expect; -var sinonChai = require('sinon-chai'); -var chaiAsPromised = require('chai-as-promised'); -var sinon = require('sinon'); -var chaiThings = require('chai-things'); + global.document = document; + global.window = window; -chai.use(sinonChai); -chai.use(chaiAsPromised); -chai.use(chaiThings); + var jquery = require('jquery'); + global.$ = window.$ = global.jQuery = window.jQuery = jquery; -global.angular = window.angular; -global.inject = window.inject; -global.expect = chai.expect; + require('angular/angular'); -angular.module('templates', []); -require('../../templates'); + require('angular-mocks/angular-mocks'); -var d3 = require('d3'); -global.d3 = d3; + var chai = require('chai'); + var expect = chai.expect; + var sinonChai = require('sinon-chai'); + var chaiAsPromised = require('chai-as-promised'); + var sinon = require('sinon'); + var chaiThings = require('chai-things'); -var nv = require('nvd3'); -global.nv = nv; + chai.use(sinonChai); + chai.use(chaiAsPromised); + chai.use(chaiThings); -var lodash = require('lodash'); -global._ = lodash; + global.angular = window.angular; + global.inject = window.inject; + global.expect = chai.expect; + global.sinon = require('sinon'); -var LocalStorage = require('node-localstorage').LocalStorage; -global.localStorage = window.localStorage = new LocalStorage('./scratch'); + angular.module('templates', []); + require('../../templates'); -var moment = require('moment'); -window.moment = moment; + var d3 = require('d3'); + global.d3 = d3; + + var nv = require('nvd3'); + global.nv = nv; + + var lodash = require('lodash'); + global._ = lodash; + + var LocalStorage = require('node-localstorage').LocalStorage; + global.localStorage = window.localStorage = new LocalStorage('./scratch'); + + var moment = require('moment'); + window.moment = moment; + } + +})(); diff --git a/testem.yml b/testem.yml index 6aacbdbe1d..0c74994e1d 100644 --- a/testem.yml +++ b/testem.yml @@ -1,25 +1,30 @@ --- -# before_tests: cd ../../.. && sudo make devjs framework: mocha -cwd: awx/ui/dist/node-tests +cwd: awx/ui/ +port: 7358 src_files: - - tests/**.js - static/js/**/*.js - static/lib/**/*.js -disable_watching: true + - tests/**/*.js serve_files: - - ../tower.concat.js - - tests/templates.js - - tests/test-support.js - - tests/unit/**/*.js - - tests/unit.js + - dist/tower.concat.js + - dist/tests/**/*.js + - dist/tests/unit.js unsafe_file_serving: true +test_page: tests.html +disable_watching: true routes: /awx/ui/dist: /static + /tests.html: ../../packaging/grunt/testem.mustache + /test-loader.js: static/lib/ember-cli-test-loader/test-loader.js + /vendor: ../../node_modules + /angular-mocks.js: dist/lib/angular-mocks/angular-mocks.js + /templates.js: dist/node-tests/templates.js +reporter: xunit launch_in_dev: - Mocha launch_in_ci: - PhantomJS launchers: Mocha: - command: NODE_PATH=awx/ui/dist/node-tests ./node_modules/.bin/mocha awx/ui/dist/node-tests/tests/unit/**/*.js + command: NODE_PATH=awx/ui/dist/node-tests ./node_modules/.bin/mocha $(find awx/ui/dist/node-tests/tests/ -name '*-test.js')