@samitouri / QOS-React-2 / commits / 0f274e5b22

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"