adds saucelabs integration to unit tests
This commit is contained in:
parent
c8e0d917f7
commit
4d41c087b0
6 changed files with 149 additions and 7 deletions
0
.npmignore
Normal file
0
.npmignore
Normal file
75
Gruntfile.js
75
Gruntfile.js
|
|
@ -1,3 +1,4 @@
|
||||||
|
_ = require('lodash')
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
var version = "0.1.19"
|
var version = "0.1.19"
|
||||||
|
|
@ -58,6 +59,62 @@ module.exports = function(grunt) {
|
||||||
makeTasks("guide", guide)
|
makeTasks("guide", guide)
|
||||||
makeTasks("api", api)
|
makeTasks("api", api)
|
||||||
|
|
||||||
|
var sauceBrowsers =[
|
||||||
|
{ browserName: 'firefox', version: '19', platform: 'XP' },
|
||||||
|
{ browserName: "internet explorer", platform: "XP", version: "6"},
|
||||||
|
{ browserName: "safari", platform: "OS X 10.9", version: "7"},
|
||||||
|
{ browserName: "iPad", platform: "OS X 10.9", version: "7.1"},
|
||||||
|
{ browserName: "opera", platform: "Linux", version: "12"},
|
||||||
|
{ browserName: "chrome", platform: "XP", version: "26"},
|
||||||
|
{ browserName: "chrome", platform: "Windows 8", version: "26"},
|
||||||
|
];
|
||||||
|
|
||||||
|
var sauceOnTestComplete = function(result, callback) {
|
||||||
|
var request = require('request')
|
||||||
|
|
||||||
|
var user = process.env.SAUCE_USERNAME;
|
||||||
|
var pass = process.env.SAUCE_ACCESS_KEY;
|
||||||
|
|
||||||
|
request.put({
|
||||||
|
url: ['https://saucelabs.com/rest/v1', user, 'jobs', result.job_id].join('/'),
|
||||||
|
auth: { user: user, pass: pass },
|
||||||
|
json: { passed: result.passed }
|
||||||
|
}, function (error, response, body) {
|
||||||
|
if (error) {
|
||||||
|
callback(error);
|
||||||
|
} else if (response.statusCode !== 200) {
|
||||||
|
callback(new Error('Unexpected response status: '
|
||||||
|
+ response.statusCode + "\n "));
|
||||||
|
} else {
|
||||||
|
callback(null, result.passed);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var sauceBaseOptions = {
|
||||||
|
username: process.env.SAUCE_USERNAME,
|
||||||
|
key: process.env.SAUCE_ACCESS_KEY,
|
||||||
|
testname: "Mithril Tests " + new Date().toJSON(),
|
||||||
|
browsers: sauceBrowsers,
|
||||||
|
sauceConfig: {
|
||||||
|
"record-video": false,
|
||||||
|
"record-screenshots": false,
|
||||||
|
},
|
||||||
|
build: process.env.TRAVIS_JOB_ID,
|
||||||
|
onTestComplete: sauceOnTestComplete,
|
||||||
|
tunnelTimeout: 5,
|
||||||
|
};
|
||||||
|
var sauceCustomOptions = {
|
||||||
|
testname: "Mithril Custom Tests "+ new Date().toJSON(),
|
||||||
|
urls: ["http://127.0.0.1:8000/tests/index.html"],
|
||||||
|
};
|
||||||
|
_.assign(sauceCustomOptions, sauceBaseOptions);
|
||||||
|
var sauceQunitOptions = {
|
||||||
|
testname: "qUnit Tests "+ new Date().toJSON(),
|
||||||
|
urls: ["http://127.0.0.1:8000/tests/e2e/test.html"],
|
||||||
|
};
|
||||||
|
_.assign(sauceQunitOptions, sauceBaseOptions);
|
||||||
|
|
||||||
var currentVersionArchiveFolder = archiveFolder + "/v" + version
|
var currentVersionArchiveFolder = archiveFolder + "/v" + version
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
md2html: md2htmlTasks,
|
md2html: md2htmlTasks,
|
||||||
|
|
@ -104,7 +161,19 @@ module.exports = function(grunt) {
|
||||||
},
|
},
|
||||||
qunit: {
|
qunit: {
|
||||||
all: ['tests/e2e/**/*.html']
|
all: ['tests/e2e/**/*.html']
|
||||||
},
|
},
|
||||||
|
"saucelabs-custom": {
|
||||||
|
all:{
|
||||||
|
options: sauceCustomOptions
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"saucelabs-qunit": {
|
||||||
|
all:{
|
||||||
|
options: sauceQunitOptions
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {},
|
||||||
|
|
||||||
connect: {
|
connect: {
|
||||||
server: {
|
server: {
|
||||||
options: {
|
options: {
|
||||||
|
|
@ -129,10 +198,14 @@ module.exports = function(grunt) {
|
||||||
grunt.loadNpmTasks('grunt-zip');
|
grunt.loadNpmTasks('grunt-zip');
|
||||||
grunt.loadNpmTasks('grunt-contrib-qunit');
|
grunt.loadNpmTasks('grunt-contrib-qunit');
|
||||||
grunt.loadNpmTasks('grunt-contrib-connect');
|
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||||
|
grunt.loadNpmTasks('grunt-saucelabs')
|
||||||
|
|
||||||
grunt.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]);
|
grunt.registerTask("build", ["test", "uglify", "zip", "md2html", "replace", "copy", "clean"]);
|
||||||
grunt.registerTask("test", ["concat", "execute"]);
|
grunt.registerTask("test", ["concat", "execute"]);
|
||||||
grunt.registerTask('teste2e', ['connect', 'qunit']);
|
grunt.registerTask('teste2e', ['connect', 'qunit']);
|
||||||
grunt.registerTask("default", ["build"]);
|
grunt.registerTask("default", ["build"]);
|
||||||
|
|
||||||
|
grunt.registerTask("sauce-qunit", ["connect", "saucelabs-qunit"]);
|
||||||
|
grunt.registerTask("sauce-custom", ["connect", "saucelabs-custom"]);
|
||||||
|
grunt.registerTask("sauce-all", ["connect", "saucelabs-qunit", "saucelabs-custom"])
|
||||||
};
|
};
|
||||||
|
|
|
||||||
10
package.json
10
package.json
|
|
@ -16,6 +16,12 @@
|
||||||
"grunt-replace": "*",
|
"grunt-replace": "*",
|
||||||
"grunt-contrib-qunit": "*",
|
"grunt-contrib-qunit": "*",
|
||||||
"grunt-contrib-connect": "*",
|
"grunt-contrib-connect": "*",
|
||||||
"grunt-zip": "*"
|
"grunt-zip": "*",
|
||||||
}
|
"request": "~2.35.0",
|
||||||
|
"q": "~1.0.0",
|
||||||
|
"saucelabs": "~0.1.1",
|
||||||
|
"sauce-tunnel": "~2.0.6",
|
||||||
|
"colors": "~0.6.2",
|
||||||
|
"lodash": "~2.4.1"
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,31 @@
|
||||||
|
//saucelabs reporting; see https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
|
||||||
|
var log = [];
|
||||||
|
var testName;
|
||||||
|
QUnit.done(function (test_results) {
|
||||||
|
var tests = [];
|
||||||
|
for(var i = 0, len = log.length; i < len; i++) {
|
||||||
|
var details = log[i];
|
||||||
|
tests.push({
|
||||||
|
name: details.name,
|
||||||
|
result: details.result,
|
||||||
|
expected: details.expected,
|
||||||
|
actual: details.actual,
|
||||||
|
source: details.source
|
||||||
|
});
|
||||||
|
}
|
||||||
|
test_results.tests = tests;
|
||||||
|
|
||||||
|
window.global_test_results = test_results;
|
||||||
|
});
|
||||||
|
QUnit.testStart(function(testDetails){
|
||||||
|
QUnit.log(function(details){
|
||||||
|
if (!details.result) {
|
||||||
|
details.name = testDetails.name;
|
||||||
|
log.push(details);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
//qunit doesn't support Function.prototype.bind...
|
//qunit doesn't support Function.prototype.bind...
|
||||||
if (!Function.prototype.bind) {
|
if (!Function.prototype.bind) {
|
||||||
Function.prototype.bind = function (oThis) {
|
Function.prototype.bind = function (oThis) {
|
||||||
|
|
|
||||||
|
|
@ -1575,7 +1575,15 @@ function testMithril(mock) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//mocks
|
//test reporting for saucelabs
|
||||||
testMithril(mock.window)
|
window.global_test_results = {
|
||||||
|
tests: [],
|
||||||
|
duration: 0,
|
||||||
|
passed: 0,
|
||||||
|
failed: 0
|
||||||
|
};
|
||||||
|
|
||||||
test.print(console.log)
|
//mock
|
||||||
|
testMithril(mock.window);
|
||||||
|
|
||||||
|
test.print(function(value){console.log(value)});
|
||||||
|
|
@ -1,7 +1,34 @@
|
||||||
function test(condition) {
|
function test(condition) {
|
||||||
|
var duration = 0;
|
||||||
|
var start = 0;
|
||||||
|
var result = true
|
||||||
|
if (performance.now) {
|
||||||
|
start = performance.now();
|
||||||
|
}
|
||||||
try {if (!condition()) throw new Error}
|
try {if (!condition()) throw new Error}
|
||||||
catch (e) {console.error(e);test.failures.push(condition)}
|
catch (e) {result = false;console.error(e);test.failures.push(condition)}
|
||||||
|
if (performance.now) {
|
||||||
|
duration = performance.now() - start;
|
||||||
|
}
|
||||||
|
|
||||||
test.total++
|
test.total++
|
||||||
|
|
||||||
|
test_obj = {
|
||||||
|
name: "" + test.total,
|
||||||
|
result: result,
|
||||||
|
duration: duration
|
||||||
|
}
|
||||||
|
if (!result) {
|
||||||
|
message: "failed: " + condition,
|
||||||
|
window.global_test_results.tests.push(test_obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
window.global_test_results.duration += duration;
|
||||||
|
if (result) {
|
||||||
|
window.global_test_results.passed++;
|
||||||
|
} else {
|
||||||
|
window.global_test_results.failed++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
test.total = 0
|
test.total = 0
|
||||||
test.failures = []
|
test.failures = []
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue