diff --git a/Gruntfile.js b/Gruntfile.js index 1ef82e6..f0b019a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -9,7 +9,22 @@ 'use strict'; module.exports = function(grunt) { + grunt.initConfig({ + + connect: { + return500: { + options: { + port: 9000, + middleware: function(connect, options) { + return [function(req, res, next){ + res.statusCode = 500; + res.end(); + }]; + } + } + } + }, jshint: { all: [ 'Gruntfile.js', @@ -80,8 +95,16 @@ module.exports = function(grunt) { consolidate: true } } + }, + selfTest: { + options: { + specs:["test/selfTest/*.js"], + "--web-security": "no" + } } }, + + nodeunit: { tasks: ['test/*_test.js'] } @@ -92,7 +115,8 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-nodeunit'); grunt.loadNpmTasks('grunt-contrib-internal'); + grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.registerTask('test', ['jshint', 'jasmine', 'nodeunit']); - grunt.registerTask('default', ['test', 'build-contrib']); + grunt.registerTask('test', ['connect:return500', 'jasmine', 'nodeunit']); + grunt.registerTask('default', ['jshint', 'test', 'build-contrib']); }; diff --git a/package.json b/package.json index fe3573e..99f03fa 100644 --- a/package.json +++ b/package.json @@ -28,14 +28,15 @@ "test": "grunt test" }, "dependencies": { - "grunt-lib-phantomjs": "~0.3.0", + "grunt-lib-phantomjs": "~0.4.0", "rimraf": "~2.1.4" }, "devDependencies": { "grunt-contrib-internal": "~0.4.5", "grunt-contrib-nodeunit": "~0.2.0", "grunt-contrib-jshint": "~0.6.2", - "grunt": "~0.4.0" + "grunt": "~0.4.1", + "grunt-contrib-connect": "~0.4.0" }, "peerDependencies": { "grunt": "~0.4.0" diff --git a/test/selfTest/TaskSpec.js b/test/selfTest/TaskSpec.js new file mode 100644 index 0000000..d33e3fb --- /dev/null +++ b/test/selfTest/TaskSpec.js @@ -0,0 +1,32 @@ +describe("Task", function() { + + /* + when running this test with `grunt jasmine:selfTest -d` you got this output + + [D] ["phantomjs","onLoadFinished","success"] + [D] ["phantomjs","onResourceRequested","http://httpbin.org/status/500"] + [D] ["phantomjs","onResourceReceived","http://httpbin.org/status/500"] + [D] ["phantomjs","onLoadFinished","fail"] + [D] ["phantomjs","fail.load","_SpecRunner.html"] + + phantomjs.page.onLoadFinished seems to be called for iframes, too. + A failing onLoadFinished caused this grunt taks to hang. + Now, after removing the event handler, this following test should work as expected + */ + it("can handle fail on iframe", function(){ + var waitedLongEnough; + runs(function(){ + iframe = document.createElement("iframe"); + iframe.src = "http://localhost:9000"; + document.body.appendChild(iframe); + + setTimeout(function(){waitedLongEnough=true;}, 50); + }); + waitsFor(function(){ + return waitedLongEnough; + }); + runs(function(){ + expect(true).toBeTruthy("without change in grunt-lib-phantomjs, jasmine would never reach this line"); + }); + }); +}); \ No newline at end of file