Skip to content
This repository was archived by the owner on Sep 8, 2020. It is now read-only.

Commit 9a4721e

Browse files
committed
Merge pull request #100 from lukepfeiffer10/protractor-setup
Add protractor testing
2 parents 724ae08 + 1bf004c commit 9a4721e

File tree

7 files changed

+118
-15
lines changed

7 files changed

+118
-15
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: node_js
22
node_js:
3-
- '0.11'
3+
- 'node'
44
git:
55
depth: 10
66
before_install:

gulpfile.js

Lines changed: 68 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@ var bump = require('gulp-bump');
1515
var runSequence = require('run-sequence');
1616
var geSaLaKaCuLa = require('gesalakacula');
1717
var reKaLa = geSaLaKaCuLa.recursiveKarmaLauncher;
18-
var versionAfterBump;
18+
var connect = require('gulp-connect');
19+
var angularProtractor = require('gulp-angular-protractor');
20+
var sauceConnectLauncher = require('sauce-connect-launcher');
21+
var versionAfterBump, sauceConnectProcess;
1922

2023
gulp.task('default', ['build', 'test']);
21-
gulp.task('ci', ['karma-sauce']);
2224
gulp.task('build', ['scripts']);
23-
gulp.task('test', ['build', 'karma']);
25+
gulp.task('test', ['build', 'protractor', 'karma']);
26+
gulp.task('ci', ['protractor-sauce','karma-sauce'], function() {
27+
sauceConnectProcess.close(function() {
28+
console.log("Closed Sauce Connect process");
29+
});
30+
});
2431

2532
gulp.task('watch', ['build', 'karma-watch'], function() {
2633
gulp.watch(['src/**/*.{js,html}'], ['build']);
@@ -69,17 +76,36 @@ gulp.task('scripts', ['clean'], function() {
6976

7077
});
7178

72-
gulp.task('karma', ['build'], function() {
73-
var server = new Server({configFile: __dirname + '/karma.conf.js', singleRun: true});
74-
server.start();
79+
gulp.task('karma', ['build'], function(callback) {
80+
runKarma(true, callback);
81+
});
82+
gulp.task('karma-watch', ['build'], function(callback) {
83+
runKarma(false, callback);
7584
});
7685

77-
gulp.task('karma-watch', ['build'], function() {
78-
var server = new Server({configFile: __dirname + '/karma.conf.js', singleRun: false});
86+
function runKarma(singleRun, callback) {
87+
var server = new Server({configFile: __dirname + '/karma.conf.js', singleRun: singleRun}, function(exitCode) {
88+
callback();
89+
});
7990
server.start();
91+
}
92+
93+
gulp.task('start-sauce-connect', function(callback) {
94+
sauceConnectLauncher({
95+
username: process.env.SAUCE_USERNAME,
96+
accessKey: process.env.SAUCE_ACCESS_KEY,
97+
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER
98+
}, function(err, sauceProcess) {
99+
if (err) {
100+
callback(err);
101+
}
102+
103+
sauceConnectProcess = sauceProcess;
104+
callback();
105+
});
80106
});
81107

82-
gulp.task('karma-sauce', ['build'], function() {
108+
gulp.task('karma-sauce', ['build', 'start-sauce-connect'], function(callback) {
83109
var customLaunchers = geSaLaKaCuLa({
84110
'Windows 7': {
85111
'internet explorer': '9..11',
@@ -92,11 +118,41 @@ gulp.task('karma-sauce', ['build'], function() {
92118
});
93119

94120
reKaLa({
95-
karma: Server,
96-
customLaunchers: customLaunchers
97-
}, process.exit);
121+
karma: Server,
122+
customLaunchers: customLaunchers
123+
}, function(code) {
124+
callback();
125+
});
126+
});
127+
128+
gulp.task('protractor', ['build'], function(callback) {
129+
runProtractor('protractor.config.js', callback);
130+
});
131+
132+
gulp.task('protractor-sauce', ['build', 'start-sauce-connect'], function(callback) {
133+
runProtractor('protractor.travis.config.js', callback);
98134
});
99135

136+
var runProtractor = function(configFile, callback) {
137+
connect.server({
138+
port: 8000
139+
});
140+
141+
gulp.src(['test/maskSpec.protractor.js'])
142+
.pipe(angularProtractor({
143+
'configFile': configFile,
144+
'debug': false,
145+
'autoStartStopServer': true
146+
}))
147+
.on('error', function(e) {
148+
callback(e);
149+
})
150+
.on('end', function() {
151+
connect.serverClose();
152+
callback();
153+
});
154+
};
155+
100156
var handleError = function(err) {
101157
console.log(err.toString());
102158
this.emit('end');

karma.conf.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ module.exports = function(config) {
7171

7272
config.set({
7373
sauceLabs: {
74-
testName: 'UI Mask CI'
74+
testName: 'UI Mask CI',
75+
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER,
76+
startConnect: false
7577
},
7678
captureTimeout: 120000,
7779
singleRun: true

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
"event-stream": "~3.3.1",
1111
"gesalakacula": "^1.4.0",
1212
"gulp": "~3.9.0",
13+
"gulp-angular-protractor": "0.0.6",
1314
"gulp-bump": "^0.3.1",
1415
"gulp-concat": "~2.6.0",
16+
"gulp-connect": "^2.3.1",
1517
"gulp-footer": "~1.0.5",
1618
"gulp-git": "^1.4.0",
1719
"gulp-header": "~1.2.2",
@@ -27,9 +29,9 @@
2729
"karma-firefox-launcher": "~0.1",
2830
"karma-jasmine": "~0.3",
2931
"karma-ng-html2js-preprocessor": "^0.1.0",
30-
"karma-phantomjs-launcher": "~0.2.1",
3132
"karma-sauce-launcher": "^0.2.14",
3233
"phantomjs": "^1.9.18",
34+
"protractor": "^3.0.0",
3335
"run-sequence": "^1.1.2"
3436
},
3537
"scripts": {},

protractor.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
exports.config = {
2+
seleniumAddress: 'http://localhost:4444/wd/hub',
3+
specs: ['test/maskSpec.protractor.js'],
4+
baseUrl: 'http://localhost:8000'
5+
};

protractor.travis.config.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
exports.config = {
2+
sauceUser: process.env.SAUCE_USERNAME,
3+
sauceKey: process.env.SAUCE_ACCESS_KEY,
4+
5+
capabilities: {
6+
'browserName': 'chrome',
7+
'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER,
8+
'build': process.env.TRAVIS_BUILD_NUMBER,
9+
'name': 'ui-mask Protractor Tests'
10+
},
11+
12+
specs: ['test/maskSpec.protractor.js'],
13+
baseUrl: 'http://localhost:8000'
14+
};

test/maskSpec.protractor.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
describe('user input', function() {
2+
it('should remove characters properly when backspacing', function() {
3+
browser.get('demo/index.html');
4+
5+
var definitionElement = element(by.id('definition'));
6+
definitionElement.sendKeys('QT****');
7+
8+
var maskedElement = element(by.id('masked'));
9+
maskedElement.sendKeys('1234');
10+
expect(maskedElement.getAttribute('value')).toBe('QT1234');
11+
maskedElement.sendKeys(protractor.Key.BACK_SPACE);
12+
expect(maskedElement.getAttribute('value')).toBe('QT123_');
13+
14+
definitionElement.clear();
15+
definitionElement.sendKeys('QT**BC**');
16+
maskedElement.sendKeys('1234');
17+
expect(maskedElement.getAttribute('value')).toBe('QT12BC34');
18+
maskedElement.sendKeys(protractor.Key.BACK_SPACE);
19+
expect(maskedElement.getAttribute('value')).toBe('QT12BC3_');
20+
maskedElement.sendKeys(protractor.Key.BACK_SPACE);
21+
maskedElement.sendKeys(protractor.Key.BACK_SPACE);
22+
expect(maskedElement.getAttribute('value')).toBe('QT1_BC__');
23+
});
24+
});

0 commit comments

Comments
 (0)