Skip to content

Commit e822ed9

Browse files
committed
restructured tests
1 parent 2ce4493 commit e822ed9

File tree

9 files changed

+150
-79
lines changed

9 files changed

+150
-79
lines changed

bin/cli.js

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ function terminateAllWorkers(callback) {
6262
}
6363
}
6464

65-
function cleanUpAndExit(signal, report, callback) {
65+
function cleanUpAndExit(signal, error, report, callback) {
66+
ConfigParser.finalBrowsers = [];
6667
callback = callback || function() {};
6768
report = report || {};
6869
logger.trace('cleanUpAndExit: signal: %s', signal);
@@ -85,11 +86,11 @@ function cleanUpAndExit(signal, report, callback) {
8586

8687
if (signal === 'SIGTERM') {
8788
logger.debug('Exiting');
88-
callback(null, report);
89+
callback(error, report);
8990
} else {
9091
terminateAllWorkers(function() {
9192
logger.debug('Exiting');
92-
callback(null, report);
93+
callback(error, report);
9394
});
9495
}
9596
}
@@ -350,6 +351,10 @@ var statusPoller = {
350351
};
351352

352353
function runTests(config, callback) {
354+
var runTestsCallback = function(error, report) {
355+
ConfigParser.finalBrowsers = [];
356+
callback(error, report);
357+
};
353358
if (config.proxy) {
354359
logger.trace('runTests: with proxy', config.proxy);
355360

@@ -364,32 +369,36 @@ function runTests(config, callback) {
364369
}
365370
if (config.browsers && config.browsers.length > 0) {
366371
ConfigParser.parse(client, config.browsers, function(browsers){
367-
launchServer(config, callback);
372+
launchServer(config, runTestsCallback);
368373

369374
logger.trace('runTests: creating tunnel');
370-
tunnel = new Tunnel(config.key, serverPort, config.tunnelIdentifier, config, function () {
371-
logger.trace('runTests: created tunnel');
372-
373-
statusPoller.start(callback);
374-
var total_runs = config.browsers.length * (Array.isArray(config.test_path) ? config.test_path.length : 1);
375-
logger.info('Launching ' + config.browsers.length + ' worker(s) for ' + total_runs + ' run(s).');
376-
browsers.forEach(function(browser) {
377-
if (browser.browser_version === 'latest') {
378-
logger.debug('[%s] Finding version.', utils.browserString(browser));
379-
logger.trace('runTests: client.getLatest');
380-
381-
client.getLatest(browser, function(err, version) {
382-
logger.trace('runTests: client.getLatest | response:', version, err);
383-
logger.debug('[%s] Version is %s.',
384-
utils.browserString(browser), version);
385-
browser.browser_version = version;
386-
// So that all latest logs come in together
387-
launchBrowsers(config, browser);
388-
});
389-
} else {
390-
launchBrowsers(config, browser);
391-
}
392-
});
375+
tunnel = new Tunnel(config.key, serverPort, config.tunnelIdentifier, config, function (err) {
376+
if(err) {
377+
cleanUpAndExit(null, err, '{}', callback);
378+
} else {
379+
logger.trace('runTests: created tunnel');
380+
381+
statusPoller.start(runTestsCallback);
382+
var total_runs = config.browsers.length * (Array.isArray(config.test_path) ? config.test_path.length : 1);
383+
logger.info('Launching ' + config.browsers.length + ' worker(s) for ' + total_runs + ' run(s).');
384+
browsers.forEach(function(browser) {
385+
if (browser.browser_version === 'latest') {
386+
logger.debug('[%s] Finding version.', utils.browserString(browser));
387+
logger.trace('runTests: client.getLatest');
388+
389+
client.getLatest(browser, function(err, version) {
390+
logger.trace('runTests: client.getLatest | response:', version, err);
391+
logger.debug('[%s] Version is %s.',
392+
utils.browserString(browser), version);
393+
browser.browser_version = version;
394+
// So that all latest logs come in together
395+
launchBrowsers(config, browser);
396+
});
397+
} else {
398+
launchBrowsers(config, browser);
399+
}
400+
});
401+
}
393402
});
394403
});
395404
} else {
@@ -408,11 +417,7 @@ exports.run = function(user_config, callback) {
408417
password: config.key
409418
});
410419
runTests(config, function(error, report) {
411-
if(error) {
412-
callback(error);
413-
} else {
414-
cleanUpAndExit('SIGTERM', report, callback);
415-
}
420+
cleanUpAndExit('SIGTERM', error, report, callback);
416421
});
417422
} catch (e) {
418423
callback(e);

lib/local.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ var Tunnel = function Tunnel(key, port, uniqueIdentifier, config, callback) {
3535
setTimeout(function() {
3636
if (!running) {
3737
logger.error('BrowserStackLocal failed to launch within 30 seconds.');
38-
throw new Error('BrowserStackLocal failed to launch within 30 seconds.');
38+
callback(new Error('BrowserStackLocal failed to launch within 30 seconds.'));
3939
}
4040
}, 30 * 1000);
4141

tests/behaviour/resources/sample_failing.html renamed to tests/behaviour/resources/qunit_sample.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<div id="qunit-fixture"></div>
1212
<script src="odd.js"></script>
1313
<script src="even.js"></script>
14-
<script src="test_failing.js"></script>
14+
<script src="qunit_test1.js"></script>
15+
<script src="qunit_test2.js"></script>
1516
</body>
1617
</html>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
QUnit.module('Partial Tests', function() {
2+
QUnit.test('Partial Tests', function(assert) {
3+
// Fails
4+
assert.ok(isOdd(2), '2 is an odd number');
5+
assert.ok(isEven(5), '5 is an even number');
6+
7+
// Passes
8+
assert.ok(isOdd(3), '3 is an odd number');
9+
assert.ok(!isOdd(4), '4 is not odd number');
10+
assert.ok(isEven(6), '6 is an even number');
11+
assert.ok(!isEven(7), '7 is not an even number');
12+
});
13+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
QUnit.module('All Pass/Fail tests', function() {
2+
QUnit.test('All Pass', function(assert) {
3+
assert.ok(isOdd(13), '13 is an odd number');
4+
assert.ok(isOdd(15), '15 is an odd number');
5+
assert.ok(!isOdd(12), '12 is not an odd number');
6+
assert.ok(isEven(14), '14 is an even number');
7+
assert.ok(isEven(16), '16 is an even number');
8+
assert.ok(!isEven(17), '17 is not an even number');
9+
});
10+
11+
QUnit.test('All Fail', function(assert) {
12+
assert.ok(isOdd(22), '22 is an odd number');
13+
assert.ok(isOdd(24), '24 is an odd number');
14+
assert.ok(!isOdd(21), '21 is not an odd number');
15+
assert.ok(isEven(23), '23 is an even number');
16+
assert.ok(isEven(25), '25 is an even number');
17+
assert.ok(!isEven(26), '26 is not an even number');
18+
});
19+
});

tests/behaviour/resources/sample.html

Lines changed: 0 additions & 15 deletions
This file was deleted.

tests/behaviour/resources/test.js

Lines changed: 0 additions & 7 deletions
This file was deleted.

tests/behaviour/resources/test_failing.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

tests/behaviour/runner.js

Lines changed: 78 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ let getBaseConfig = function() {
1212
username: 'BROWSERSTACK_USER',
1313
key: 'BROWSERSTACK_KEY',
1414
test_framework: 'qunit',
15-
test_path: path.resolve(__dirname, 'resources', 'sample.html'),
15+
test_path: path.resolve(__dirname, 'resources', 'qunit_sample.html'),
1616
build: "BrowserStack Runner Behaviour Tests",
1717
browsers: [ {
1818
browser: 'firefox',
19-
browser_version: 'latest',
19+
browser_version: '47.0',
2020
os: 'Windows',
2121
os_version: '7'
2222
}, {
2323
browser: 'chrome',
24-
browser_version: 'latest',
24+
browser_version: '52.0',
2525
os: 'Windows',
2626
os_version: '7'
2727
} ]
@@ -97,7 +97,6 @@ describe('Pass/Fail reporting', function() {
9797

9898
it('report keys should have browser names', function(done) {
9999
let config = getBaseConfig();
100-
config.test_path = path.resolve(__dirname, 'resources', 'sample_failing.html');
101100
browserstackRunner.run(config, function(err, report) {
102101
assert.equal(err, null);
103102
var parsedReport = JSON.parse(report);
@@ -108,7 +107,6 @@ describe('Pass/Fail reporting', function() {
108107
});
109108
it('report keys should have assertions and tests', function(done) {
110109
let config = getBaseConfig();
111-
config.test_path = path.resolve(__dirname, 'resources', 'sample_failing.html');
112110
browserstackRunner.run(config, function(err, report) {
113111
assert.equal(err, null);
114112
var parsedReport = JSON.parse(report);
@@ -120,19 +118,89 @@ describe('Pass/Fail reporting', function() {
120118
});
121119
});
122120
describe('Test Assertions', function() {
123-
it('report should have proper assertions for tests', function(done) {
121+
it('report should have proper number of assertions for tests', function(done) {
124122
let config = getBaseConfig();
125-
config.test_path = path.resolve(__dirname, 'resources', 'sample_failing.html');
126123
browserstackRunner.run(config, function(err, report) {
127124
assert.equal(err, null);
125+
console.log(report);
128126
var parsedReport = JSON.parse(report);
129-
//assert.equal(parsedReport["Windows 7, Chrome 52.0"].assertions.length, 6);
130-
//assert.equal(parsedReport["Windows 7, Firefox 47.0"].assertions.length, 6);
131-
//console.log("REPORT!! " + JSON.stringify( parsedReport["Windows 7, Chrome 52.0"] ));
127+
// Only failed assertions are emitted
128+
assert.equal(parsedReport["Windows 7, Chrome 52.0"].assertions.length, 8);
129+
assert.equal(parsedReport["Windows 7, Firefox 47.0"].assertions.length, 8);
130+
done();
131+
});
132+
});
133+
it('report should have specific keys', function(done) {
134+
let config = getBaseConfig();
135+
console.log(JSON.stringify(config));
136+
browserstackRunner.run(config, function(err, report) {
137+
assert.equal(err, null);
138+
var parsedReport = JSON.parse(report);
139+
Object.keys(parsedReport).forEach(function(reportKey) {
140+
parsedReport[reportKey].assertions.forEach(function(assertion) {
141+
[ "actual", "expected", "message", "source" ].forEach(function(key) {
142+
assert.notEqual(assertion[key], null);
143+
});
144+
});
145+
});
146+
done();
147+
});
148+
});
149+
it('report should have message in assertions', function(done) {
150+
let config = getBaseConfig();
151+
console.log(JSON.stringify(config));
152+
browserstackRunner.run(config, function(err, report) {
153+
assert.equal(err, null);
154+
var parsedReport = JSON.parse(report);
155+
Object.keys(parsedReport).forEach(function(reportKey) {
156+
parsedReport[reportKey].assertions.forEach(function(assertion) {
157+
assert.notEqual(assertion["message"].match(/\d+ is .*an .* number/), null);
158+
});
159+
});
132160
done();
133161
});
134162
});
135163
});
136164
describe('Test tests', function() {
165+
it('report should have proper number of tests', function(done) {
166+
let config = getBaseConfig();
167+
browserstackRunner.run(config, function(err, report) {
168+
assert.equal(err, null);
169+
var parsedReport = JSON.parse(report);
170+
assert.equal(parsedReport["Windows 7, Chrome 52.0"].tests.length, 1);
171+
assert.equal(parsedReport["Windows 7, Firefox 47.0"].tests.length, 1);
172+
done();
173+
});
174+
});
175+
it('report should have specific keys', function(done) {
176+
let config = getBaseConfig();
177+
browserstackRunner.run(config, function(err, report) {
178+
assert.equal(err, null);
179+
var parsedReport = JSON.parse(report);
180+
Object.keys(parsedReport).forEach(function(reportKey) {
181+
parsedReport[reportKey].tests.forEach(function(test) {
182+
[ "runtime", "total", "passed", "failed", "url" ].forEach(function(key) {
183+
assert.notEqual(test[key], null);
184+
});
185+
});
186+
});
187+
done();
188+
});
189+
});
190+
it('report should have message in assertions', function(done) {
191+
let config = getBaseConfig();
192+
browserstackRunner.run(config, function(err, report) {
193+
assert.equal(err, null);
194+
var parsedReport = JSON.parse(report);
195+
Object.keys(parsedReport).forEach(function(reportKey) {
196+
parsedReport[reportKey].tests.forEach(function(test) {
197+
assert.equal(test["total"], 3);
198+
assert.equal(test["passed"], 1);
199+
assert.equal(test["failed"], 2);
200+
});
201+
});
202+
done();
203+
});
204+
});
137205
});
138206
});

0 commit comments

Comments
 (0)