forked from ionic-team/ionic-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.js
135 lines (115 loc) · 3.82 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
var _ = require('lodash');
var buildConfig = require('../build.config');
var connect = require('connect');
var cp = require('child_process');
var gutil = require('gulp-util');
var http = require('http');
var karma = require('karma').server;
var path = require('canonical-path');
var uuid = require('node-uuid');
var projectRoot = path.resolve(__dirname, '../..');
var karmaSauceConf = require('../karma-sauce.conf.js');
module.exports = function(gulp, argv) {
var includeCodeCoverage = true;
if ( argv.skipCoverage ){
includeCodeCoverage = false;
}
var karmaConf = require('../karma.conf')(includeCodeCoverage);
/*
* Connect to Saucelabs
*/
var sauceInstance;
gulp.task('sauce-connect', function(done) {
gutil.log('sauce-connect parameters: ', _.pick(process.env, ['SAUCE_USER', 'SAUCE_KEY', 'SAUCE_TUNNEL_ID', 'SAUCE_BUILD_ID']));
require('sauce-connect-launcher')({
username: process.env.SAUCE_USER,
accessKey: process.env.SAUCE_KEY,
tunnelIdentifier: process.env.SAUCE_TUNNEL_ID || 0,
// verbose: true
}, function(err, instance) {
if (err) return done('Failed to launch sauce connect!');
sauceInstance = instance;
done();
});
});
function sauceDisconnect(done) {
sauceInstance ? sauceInstance.close(done) : done();
}
/*
* Karma
*/
argv.browsers && (karmaConf.browsers = argv.browsers.trim().split(','));
argv.reporters && (karmaConf.reporters = argv.reporters.trim().split(','));
gulp.task('karma', function(done) {
karmaConf.singleRun = true;
karma.start(karmaConf, done);
});
gulp.task('karma-watch', function(done) {
karmaConf.singleRun = false;
karma.start(karmaConf, done);
});
gulp.task('karma-sauce', ['run-karma-sauce'], sauceDisconnect);
gulp.task('run-karma-sauce', ['sauce-connect'], function(done) {
return karma.start(karmaSauceConf, done);
});
/*
* Protractor Snapshot Tests
*/
var protractorHttpServer;
gulp.task('protractor-server', function() {
var app = connect().use(connect.static(projectRoot));
protractorHttpServer = http.createServer(app).listen(buildConfig.protractorPort);
});
gulp.task('snapshot', ['protractor-server', 'demos'], function(done) {
snapshot(done, 'config/protractor.conf.js');
});
gulp.task('snapshot-sauce', ['run-snapshot-sauce'], sauceDisconnect);
gulp.task('run-snapshot-sauce', ['sauce-connect', 'protractor-server'], function(done) {
snapshot(done, 'config/protractor-sauce.conf.js');
});
var snapshotValues = _.merge({
browser: 'chrome',
platform: 'linux',
params: {
platform_id: 'chrome_local_test',
platform_index: 0,
platform_count: 1,
width: 400,
height: 800,
test_id: uuid.v4()
}
}, argv);
function snapshot(done, configFile) {
var protractorArgs = [
'--browser <%= browser %>',
'--platform <%= platform %>',
'--params.platform_id=<%= params.platform_id %>',
'--params.platform_index=<%= params.platform_index %>',
'--params.platform_count=<%= params.platform_count %>',
'--params.width=<%= params.width %>',
'--params.height=<%= params.height %>',
'--params.test_id=<%= params.test_id %>',
].map(function(argument) {
return _.template(argument, snapshotValues);
});
return protractor(done, [configFile].concat(protractorArgs));
}
function protractor(done, args) {
var errored = false;
var child = cp.spawn('protractor', args, {
stdio: [process.stdin, process.stdout, 'pipe']
});
child.stderr.on('data', function(data) {
protractorHttpServer.close();
console.error(data.toString());
if (!errored) {
errored = true;
done('Protractor tests failed.');
}
});
child.on('exit', function() {
protractorHttpServer.close();
done();
});
}
};