Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 264819a

Browse files
chore(modules): execute modules unit tests in one karma run
SauceLabs is struggling to keep connecting and disconnecting for each of the modules unit test runs. This commit puts most of the module tests into IIFEs so that they can be run in one go. * ngMock is still tested separately since unlike the other tests it doesn't want to have a pre-built version of ngMock available. * ngAnimate is still tested separately because it does some funny things with globals that were difficult to isolate in the main modules test run.
1 parent 5f1cf11 commit 264819a

7 files changed

+102
-48
lines changed

Gruntfile.js

+54-19
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var serveFavicon = require('serve-favicon');
44
var serveStatic = require('serve-static');
55
var serveIndex = require('serve-index');
66
var files = require('./angularFiles').files;
7+
var mergeFilesFor = require('./angularFiles').mergeFilesFor;
78
var util = require('./lib/grunt/utils.js');
89
var versionInfo = require('./lib/versions/version-info');
910
var path = require('path');
@@ -141,16 +142,9 @@ module.exports = function(grunt) {
141142
'jquery-2.2': 'karma-jquery-2.2.conf.js',
142143
'jquery-2.1': 'karma-jquery-2.1.conf.js',
143144
docs: 'karma-docs.conf.js',
144-
'modules-ngAnimate': 'ngAnimate',
145-
'modules-ngAria': 'ngAria',
146-
'modules-ngCookies': 'ngCookies',
147-
'modules-ngMessageFormat': 'ngMessageFormat',
148-
'modules-ngMessages': 'ngMessages',
149-
'modules-ngMock': 'ngMock',
150-
'modules-ngResource': 'ngResource',
151-
'modules-ngRoute': 'ngRoute',
152-
'modules-ngSanitize': 'ngSanitize',
153-
'modules-ngTouch': 'ngTouch'
145+
modules: 'karma-modules.conf.js',
146+
'modules-ngAnimate': 'karma-modules-ngAnimate.conf.js',
147+
'modules-ngMock': 'karma-modules-ngMock.conf.js'
154148
},
155149

156150

@@ -220,6 +214,12 @@ module.exports = function(grunt) {
220214
dest: 'build/angular-touch.js',
221215
src: util.wrap(files['angularModules']['ngTouch'], 'module')
222216
},
217+
touchModuleTestBundle: {
218+
dest: 'build/test-bundles/angular-touch.js',
219+
prefix: 'src/module.prefix',
220+
src: mergeFilesFor('karmaModules-ngTouch'),
221+
suffix: 'src/module.suffix'
222+
},
223223
mocks: {
224224
dest: 'build/angular-mocks.js',
225225
src: util.wrap(files['angularModules']['ngMock'], 'module'),
@@ -229,18 +229,42 @@ module.exports = function(grunt) {
229229
dest: 'build/angular-sanitize.js',
230230
src: util.wrap(files['angularModules']['ngSanitize'], 'module')
231231
},
232+
sanitizeModuleTestBundle: {
233+
dest: 'build/test-bundles/angular-sanitize.js',
234+
prefix: 'src/module.prefix',
235+
src: mergeFilesFor('karmaModules-ngSanitize'),
236+
suffix: 'src/module.suffix'
237+
},
232238
resource: {
233239
dest: 'build/angular-resource.js',
234240
src: util.wrap(files['angularModules']['ngResource'], 'module')
235241
},
242+
resourceModuleTestBundle: {
243+
dest: 'build/test-bundles/angular-resource.js',
244+
prefix: 'src/module.prefix',
245+
src: mergeFilesFor('karmaModules-ngResource'),
246+
suffix: 'src/module.suffix'
247+
},
236248
messageformat: {
237249
dest: 'build/angular-message-format.js',
238250
src: util.wrap(files['angularModules']['ngMessageFormat'], 'module')
239251
},
252+
messageformatModuleTestBundle: {
253+
dest: 'build/test-bundles/angular-message-format.js',
254+
prefix: 'src/module.prefix',
255+
src: mergeFilesFor('karmaModules-ngMessageFormat'),
256+
suffix: 'src/module.suffix'
257+
},
240258
messages: {
241259
dest: 'build/angular-messages.js',
242260
src: util.wrap(files['angularModules']['ngMessages'], 'module')
243261
},
262+
messagesModuleTestBundle: {
263+
dest: 'build/test-bundles/angular-messages.js',
264+
prefix: 'src/module.prefix',
265+
src: mergeFilesFor('karmaModules-ngMessages'),
266+
suffix: 'src/module.suffix'
267+
},
244268
animate: {
245269
dest: 'build/angular-animate.js',
246270
src: util.wrap(files['angularModules']['ngAnimate'], 'module')
@@ -249,14 +273,32 @@ module.exports = function(grunt) {
249273
dest: 'build/angular-route.js',
250274
src: util.wrap(files['angularModules']['ngRoute'], 'module')
251275
},
276+
routeModuleTestBundle: {
277+
dest: 'build/test-bundles/angular-route.js',
278+
prefix: 'src/module.prefix',
279+
src: mergeFilesFor('karmaModules-ngRoute'),
280+
suffix: 'src/module.suffix'
281+
},
252282
cookies: {
253283
dest: 'build/angular-cookies.js',
254284
src: util.wrap(files['angularModules']['ngCookies'], 'module')
255285
},
286+
cookiesModuleTestBundle: {
287+
dest: 'build/test-bundles/angular-cookies.js',
288+
prefix: 'src/module.prefix',
289+
src: mergeFilesFor('karmaModules-ngCookies'),
290+
suffix: 'src/module.suffix'
291+
},
256292
aria: {
257293
dest: 'build/angular-aria.js',
258294
src: util.wrap(files['angularModules']['ngAria'], 'module')
259295
},
296+
ariaModuleTestBundle: {
297+
dest: 'build/test-bundles/angular-aria.js',
298+
prefix: 'src/module.prefix',
299+
src: mergeFilesFor('karmaModules-ngAria'),
300+
suffix: 'src/module.suffix'
301+
},
260302
parseext: {
261303
dest: 'build/angular-parse-ext.js',
262304
src: util.wrap(files['angularModules']['ngParseExt'], 'module')
@@ -439,16 +481,9 @@ module.exports = function(grunt) {
439481
grunt.registerTask('test:jquery-2.1', 'Run the jQuery 2.1 unit tests with Karma', ['tests:jquery-2.1']);
440482
grunt.registerTask('test:modules', 'Run the Karma module tests with Karma', [
441483
'build',
484+
'tests:modules',
442485
'tests:modules-ngAnimate',
443-
'tests:modules-ngAria',
444-
'tests:modules-ngCookies',
445-
'tests:modules-ngMessageFormat',
446-
'tests:modules-ngMessages',
447-
'tests:modules-ngMock',
448-
'tests:modules-ngResource',
449-
'tests:modules-ngRoute',
450-
'tests:modules-ngSanitize',
451-
'tests:modules-ngTouch'
486+
'tests:modules-ngMock'
452487
]);
453488
grunt.registerTask('test:docs', 'Run the doc-page tests with Karma', ['package', 'tests:docs']);
454489
grunt.registerTask('test:unit', 'Run unit, jQuery and Karma module tests with Karma', [

angularFiles.js

+2-14
Original file line numberDiff line numberDiff line change
@@ -189,42 +189,34 @@ var angularFiles = {
189189
'src/angular.bind.js'
190190
],
191191

192-
'karmaModulesBase': [
192+
'karmaModules-ngAnimate': [
193193
'build/angular.js',
194194
'build/angular-mocks.js',
195195
'test/modules/no_bootstrap.js',
196196
'test/helpers/matchers.js',
197197
'test/helpers/privateMocks.js',
198198
'test/helpers/support.js',
199-
'test/helpers/testabilityPatch.js'
200-
],
201-
202-
'karmaModules-ngAnimate': [
203-
'@karmaModulesBase',
199+
'test/helpers/testabilityPatch.js',
204200
'@angularSrcModuleNgAnimate',
205201
'test/ngAnimate/**/*.js'
206202
],
207203

208204
'karmaModules-ngAria': [
209-
'@karmaModulesBase',
210205
'@angularSrcModuleNgAria',
211206
'test/ngAria/**/*.js'
212207
],
213208

214209
'karmaModules-ngCookies': [
215-
'@karmaModulesBase',
216210
'@angularSrcModuleNgCookies',
217211
'test/ngCookies/**/*.js'
218212
],
219213

220214
'karmaModules-ngMessageFormat': [
221-
'@karmaModulesBase',
222215
'@angularSrcModuleNgMessageFormat',
223216
'test/ngMessageFormat/**/*.js'
224217
],
225218

226219
'karmaModules-ngMessages': [
227-
'@karmaModulesBase',
228220
'build/angular-animate.js',
229221
'@angularSrcModuleNgMessages',
230222
'test/ngMessages/**/*.js'
@@ -245,26 +237,22 @@ var angularFiles = {
245237
],
246238

247239
'karmaModules-ngResource': [
248-
'@karmaModulesBase',
249240
'@angularSrcModuleNgResource',
250241
'test/ngResource/**/*.js'
251242
],
252243

253244
'karmaModules-ngRoute': [
254-
'@karmaModulesBase',
255245
'build/angular-animate.js',
256246
'@angularSrcModuleNgRoute',
257247
'test/ngRoute/**/*.js'
258248
],
259249

260250
'karmaModules-ngSanitize': [
261-
'@karmaModulesBase',
262251
'@angularSrcModuleNgSanitize',
263252
'test/ngSanitize/**/*.js'
264253
],
265254

266255
'karmaModules-ngTouch': [
267-
'@karmaModulesBase',
268256
'@angularSrcModuleNgTouch',
269257
'test/ngTouch/**/*.js'
270258
],

karma-modules-ngAnimate.conf.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
3+
var angularFiles = require('./angularFiles');
4+
var sharedConfig = require('./karma-shared.conf');
5+
6+
module.exports = function(config) {
7+
sharedConfig(config, {testName: 'AngularJS: isolated module tests (ngAnimate)', logFile: 'karma-ngAnimate-isolated.log'});
8+
9+
config.set({
10+
files: angularFiles.mergeFilesFor('karmaModules-ngAnimate')
11+
});
12+
};

karma-modules-ngMock.conf.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
3+
var angularFiles = require('./angularFiles');
4+
var sharedConfig = require('./karma-shared.conf');
5+
6+
module.exports = function(config) {
7+
sharedConfig(config, {testName: 'AngularJS: isolated module tests (ngMock)', logFile: 'karma-ngMock-isolated.log'});
8+
9+
config.set({
10+
files: angularFiles.mergeFilesFor('karmaModules-ngMock')
11+
});
12+
};

karma-modules.conf.js

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
'use strict';
22

3-
var angularFiles = require('./angularFiles');
43
var sharedConfig = require('./karma-shared.conf');
54

65
module.exports = function(config) {
7-
var angularModule = process.env.KARMA_MODULE;
8-
9-
sharedConfig(config, {testName: 'AngularJS: module ' + angularModule, logFile: 'karma-modules-' + angularModule + '.log'});
6+
sharedConfig(config, {testName: 'AngularJS: isolated module tests', logFile: 'karma-modules-isolated.log'});
107

118
config.set({
12-
files: angularFiles.mergeFilesFor('karmaModules-' + angularModule)
9+
files: [
10+
'build/angular.js',
11+
'build/angular-mocks.js',
12+
'test/modules/no_bootstrap.js',
13+
'test/helpers/matchers.js',
14+
'test/helpers/privateMocks.js',
15+
'test/helpers/support.js',
16+
'test/helpers/testabilityPatch.js',
17+
'build/test-bundles/angular-*.js'
18+
]
1319
});
1420
};

lib/grunt/plugins.js

+1-10
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,7 @@ module.exports = function(grunt) {
4343

4444

4545
grunt.registerMultiTask('tests', '**Use `grunt test` instead**', function() {
46-
var configFile;
47-
48-
if (this.nameArgs.includes('modules')) {
49-
configFile = 'karma-modules.conf.js';
50-
process.env.KARMA_MODULE = this.data;
51-
} else {
52-
configFile = this.data;
53-
}
54-
55-
util.startKarma(configFile, true, this.async());
46+
util.startKarma(this.data, true, this.async());
5647
});
5748

5849

lib/grunt/utils.js

+10
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,16 @@ module.exports = {
133133

134134
build: function(config, fn) {
135135
var files = grunt.file.expand(config.src);
136+
// grunt.file.expand might reorder the list of files
137+
// when it is expanding globs, so we use prefix and suffix
138+
// fields to ensure that files are at the start of end of
139+
// the list (primarily for wrapping in an IIFE).
140+
if (config.prefix) {
141+
files = grunt.file.expand(config.prefix).concat(files);
142+
}
143+
if (config.suffix) {
144+
files = files.concat(grunt.file.expand(config.suffix));
145+
}
136146
var styles = config.styles;
137147
var processedStyles;
138148
//concat

0 commit comments

Comments
 (0)