new webdriver-jasmine task and config
Thomas Aylott committed
Oct 31, 2013 at 18:58 UTC
0f274e5b225a9cdf4710cdd63f50a612f100cddf
5 files changed
+108
-47
Gruntfile.js
+6
-4
@@ -5,6 +5,7 @@ var jsxTask = require('./grunt/tasks/jsx');
5
var browserifyTask = require('./grunt/tasks/browserify');
6
var populistTask = require('./grunt/tasks/populist');
7
var phantomTask = require('./grunt/tasks/phantom');
8
+var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine.js');
9
var npmTask = require('./grunt/tasks/npm');
10
var releaseTasks = require('./grunt/tasks/release');
11
@@ -18,7 +19,7 @@ module.exports = function(grunt) {
19
populist: require('./grunt/config/populist'),
20
phantom: require('./grunt/config/phantom'),
21
connect: require('./grunt/config/server')(grunt),
21
- "saucelabs-jasmine": require('./grunt/config/saucelabs-jasmine'),
22
+ "webdriver-jasmine": require('./grunt/config/webdriver-jasmine.js'),
23
npm: require('./grunt/config/npm'),
24
clean: ['./build', './*.gem', './docs/_site', './examples/shared/*.js'],
25
jshint: require('./grunt/config/jshint'),
@@ -44,6 +45,8 @@ module.exports = function(grunt) {
45
46
grunt.registerMultiTask('phantom', phantomTask);
47
48
+ grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
49
+
50
grunt.registerMultiTask('npm', npmTask);
51
52
// Check that the version we're exporting is the same one we expect in the
@@ -73,10 +76,9 @@ module.exports = function(grunt) {
76
'populist:test'
77
]);
78
76
- grunt.registerTask('test:browser', [
77
- 'build:test',
79
+ grunt.registerTask('test:webdriver', [
80
'connect',
79
- 'saucelabs-jasmine'
81
+ 'webdriver-jasmine:local'
82
]);
83
grunt.registerTask('test', ['build:test', 'build:basic', 'phantom:run']);
84
grunt.registerTask('npm:test', ['build', 'npm:pack']);
grunt/config/saucelabs-jasmine.js
deleted
-42
@@ -1,42 +0,0 @@
1
-// https://saucelabs.com/docs/platforms
2
-
3
-var browsers = [
4
- { browserName: 'chrome', platform: 'linux' },
5
-
6
- { browserName: 'android', platform: 'Linux', version: '4.0', 'device-type': 'tablet', 'device-orientation': 'portrait' },
7
- { browserName: 'android', platform: 'Linux', version: '4.0' },
8
-
9
- { browserName: 'ipad', platform: 'OS X 10.6', version: '4' },
10
- { browserName: 'ipad', platform: 'OS X 10.8', version: '5.1' },
11
- { browserName: 'iphone', platform: 'OS X 10.8', version: '6.1' },
12
-
13
- { browserName: 'firefox', version: '24', platform: 'Windows 7' },
14
- { browserName: 'firefox', version: '19', platform: 'Windows XP' },
15
- { browserName: 'firefox', version: '3', platform: 'Linux' },
16
-
17
- { browserName: 'opera', platform: 'Windows 2008', version: '12' },
18
-
19
- { browserName: 'internet explorer', platform: 'Windows 8', version: '10' },
20
- { browserName: 'internet explorer', platform: 'Windows 7', version: '9' },
21
- { browserName: 'internet explorer', platform: 'Windows 7', version: '8' },
22
- { browserName: 'internet explorer', platform: 'Windows XP', version: '8' },
23
- { browserName: 'internet explorer', platform: 'Windows XP', version: '7' },
24
- { browserName: 'internet explorer', platform: 'Windows XP', version: '6' },
25
-
26
- { browserName: 'safari', platform: 'OS X 10.8', version: '6' },
27
- { browserName: 'safari', platform: 'OS X 10.6', version: '5' },
28
-];
29
-
30
-module.exports = {
31
- all: {
32
- options: {
33
- urls: ["http://127.0.0.1:9999/test/sauce-harness.html"],
34
- tunnelTimeout: 5,
35
- build: process.env.TRAVIS_JOB_ID || 'dev' + Date.now(),
36
- concurrency: 3,
37
- browsers: browsers,
38
- testname: "React",
39
- tags: ["master"]
40
- }
41
- }
42
-}
grunt/config/webdriver-jasmine.js
new
+66
@@ -0,0 +1,66 @@
1
+// https://saucelabs.com/docs/platforms
2
+
3
+var browsers = [
4
+ { browserName: 'chrome', platform: 'linux' },
5
+
6
+ // { browserName: 'android', platform: 'Linux', version: '4.0', 'device-type': 'tablet', 'device-orientation': 'portrait' },
7
+ // { browserName: 'android', platform: 'Linux', version: '4.0' },
8
+ //
9
+ // { browserName: 'ipad', platform: 'OS X 10.6', version: '4' },
10
+ // { browserName: 'ipad', platform: 'OS X 10.8', version: '5.1' },
11
+ // { browserName: 'iphone', platform: 'OS X 10.8', version: '6.1' },
12
+ //
13
+ // { browserName: 'firefox', version: '24', platform: 'Windows 7' },
14
+ // { browserName: 'firefox', version: '19', platform: 'Windows XP' },
15
+ // { browserName: 'firefox', version: '3', platform: 'Linux' },
16
+ //
17
+ // { browserName: 'opera', platform: 'Windows 2008', version: '12' },
18
+ //
19
+ // { browserName: 'internet explorer', platform: 'Windows 8', version: '10' },
20
+ // { browserName: 'internet explorer', platform: 'Windows 7', version: '9' },
21
+ // { browserName: 'internet explorer', platform: 'Windows 7', version: '8' },
22
+ // { browserName: 'internet explorer', platform: 'Windows XP', version: '8' },
23
+ // { browserName: 'internet explorer', platform: 'Windows XP', version: '7' },
24
+ // { browserName: 'internet explorer', platform: 'Windows XP', version: '6' },
25
+ //
26
+ // { browserName: 'safari', platform: 'OS X 10.8', version: '6' },
27
+ // { browserName: 'safari', platform: 'OS X 10.6', version: '5' },
28
+];
29
+
30
+exports.local = {
31
+ webdriver: {
32
+ remote: {
33
+ protocol: 'http:',
34
+ hostname: '127.0.0.1',
35
+ port: '9515',
36
+ path: '/'
37
+ }
38
+ },
39
+ browser:{browserName:'chrome'},
40
+ url: "http://127.0.0.1:9999/test/sauce-harness.html",
41
+ onComplete: function(report){
42
+ var browser = this;
43
+ console.log('report.passed', report.passed)
44
+ }
45
+}
46
+
47
+if (false)
48
+exports.saucelabs = {
49
+ webdriver: {
50
+ remote:{
51
+ // https://github.com/admc/wd/blob/master/README.md#named-parameters
52
+ user: process.env.SAUCE_USERNAME,
53
+ pwd: process.env.SAUCE_ACCESS_KEY,
54
+
55
+ protocol: 'http:',
56
+ hostname: 'ondemand.saucelabs.com',
57
+ port: '80',
58
+ path: '/wd/hub'
59
+ }
60
+ },
61
+ url: "http://127.0.0.1:9999/test/sauce-harness.html",
62
+ onComplete: function(report){
63
+ var browser = this;
64
+ // .then(function(report){return browser.sauceJobStatus(report.passed);})
65
+ }
66
+}
grunt/tasks/webdriver-jasmine.js
new
+33
@@ -0,0 +1,33 @@
1
+var grunt = require("grunt");
2
+var wd = require('wd');
3
+
4
+module.exports = function(){
5
+ var taskSucceeded = this.async();
6
+ var browser = wd.promiseChainRemote(this.data.webdriver.remote);
7
+
8
+ browser.on('status', function(info) {
9
+ grunt.verbose.writeln(info);
10
+ });
11
+
12
+ browser.on('command', function(meth, path, data) {
13
+ grunt.verbose.writeln(' > ' + meth, path, data || '');
14
+ });
15
+
16
+ browser
17
+ .init(this.data.browser)
18
+ .get(this.data.url)
19
+ .then(function(){return browser;})
20
+ .then(getJSReport)
21
+ .then(this.data.onComplete.bind(browser), this.data.onError.bind(browser))
22
+ .fin(browser.quit.bind(browser))
23
+ .done(taskSucceeded.bind(null,true), taskSucceeded.bind(null,false))
24
+ ;
25
+}
26
+
27
+function getJSReport(browser){
28
+ return browser
29
+ .waitForCondition("typeof window.jasmine != 'undefined'", 500)
30
+ .waitForCondition("typeof window.jasmine.getJSReport != 'undefined'", 10e3)
31
+ .eval("jasmine.getJSReport()")
32
+ ;
33
+}
package.json
+3
-1
@@ -60,7 +60,9 @@
60
"jasmine-tapreporter": "~0.2.2",
61
"grunt-saucelabs": "~4.1.2",
62
"grunt-contrib-connect": "~0.5.0",
63
- "es5-shim": "~2.1.0"
63
+ "es5-shim": "~2.1.0",
64
+ "sauce-tunnel": "~1.0.2",
65
+ "wd": "~0.2.2"
66
},
67
"engines": {
68
"node": ">=0.10.0"