2013-03-27 6 views
10

ich folgendes testrunner.html haben:Mokka init Timeout mit Mokka-PhantomJS

<html> 
    <head> 
    <title>Specs</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <link rel="stylesheet" href="/content/css/mocha.css" /> 
    <script> 
     function assert(expr, msg) { 
      if (!expr) throw new Error(msg || 'failed'); 
     } 
    </script> 

    <script src="/client/lib/require.js" type="text/javascript" data-main="/client/specs/_runner.js"></script> 

    </head> 
    <body> 
    <div id="mocha"></div> 
    </body> 
</html> 

Die _runner.js sieht wie folgt aus:

// Configure RequireJS 
require.config({ 
    baseUrl: '/client', 
    urlArgs: "v=" + (new Date()).getTime() 
}); 

// Require libraries 
require(['require', 'lib/chai', 'lib/mocha'], function (require, chai) { 

    // Chai 
    assert = chai.assert; 
    should = chai.should(); 
    expect = chai.expect; 

    // Mocha 
    mocha.setup('bdd'); 


    // Require base tests before starting 
    require(['specs/stringcalculator.specs'], function (person) { 
     mocha.setup({ globals: ['hasCert'] }); 
     // Start runner 
     if (window.mochaPhantomJS) { 
      mochaPhantomJS.run(); 
     } 
     else { mocha.run(); } 
    }); 

}); 

Die StringCalculator.specs.js ist dies:

define(['app/model/StringCalculator'], function() { 

    describe("StringCalculator", function() { 

     describe("when an empty string is passed in", function() { 
      it("returns 0", function() { 
       var result = StringCalculator.add(""); 
       assert(result === 0); 
      }); 
     }); 

     describe("when a number is passed in", function() { 
      it("returns the number", function() { 
       var result = StringCalculator.add("2"); 
       assert(result === 2); 
      }); 
     }); 

     describe("when string is passed in", function() { 
      it("returns NaN", function() { 
       var result = StringCalculator.add("a"); 
       assert(isNaN(result)); 
      }); 
     }); 

     describe("when '1,2' is passed in", function() { 
      it("returns 3", function() { 
       var result = StringCalculator.add("1,2"); 
       assert(result === 3); 
      }); 
     }); 
    }); 
}); 

Und das ist die StringCalculator.js selbst (aus den Mocha-Proben):

define([], function() { 
    window.StringCalculator = StringCalculator = { 
     add: function(inputString) { 
      if (inputString === '') { 
       return 0; 
      } 

      var result = 0; 
      var inputStrings = inputString.split(','); 

      for (var i = 0; i < inputStrings.length; i++) { 
       result += parseInt(inputStrings[i]); 
      } 

      return result; 
     } 
    } 
}); 

Wenn die Spezifikationen in einem Browser ausgeführt wird testrunner.html Aufruf, funktioniert alles wie erwartet. Wenn mocha-phantomjs client/specs/testrunner.html auf OS X läuft, bekomme ich folgende Fehlermeldung:

Failed to start mocha: Init timeout

Was kann ich hier fehlt?

Ich versuchte auch mocha-phantomjs http://httpjs.herokuapp.com, die mit dem gleichen Fehler fehlschlägt.

Update: Wenn ich mocha-phantomjs http://localhost:81/client/specs/testrunner.html Aufruf erhalte ich auch die folgende Fehlermeldung auf der Konsole:

RangeError: Maximum call stack size exceeded. 

http://localhost:81/client/lib/chai.js?v=123423553533535:2601 
Failed to start mocha: Init timeout 

Antwort

1

This file zeigt, wie es zu benutzen.

Und für mich scheint NodeJS 0.10.x nicht damit zu arbeiten. Nach dem Wechsel zu NodeJS 0.8.8 funktioniert alles wie erwartet.

Mit den aktuellen Versionen von Mocha-Phantomjs und PhantomJS funktioniert jetzt alles einwandfrei.

+0

Node 0.10.x Benutzer nicht völlig entmutigt werden - ich bin mir sicher, das war zu der Zeit wahr. Aber heute bin ich auf 0.10.13 und die obige Lösung, um mochaPhantomJS.run() zu verwenden, funktionierte für mich. – laurelnaiad

+0

Ich bekomme immer noch gelegentlich Timeouts (kein Wortspiel beabsichtigt). Mit den neuesten Mocha-Phantomjs auch, mit einem Timeout von 10000. – Till

9

Ich erhielt den gleichen Failed to start mocha Fehler beim Ausführen mocha-phantomjs über das grunt-mocha-phantomjs npm-Paket. Fand die Lösung here.

hier als Referenz Wiederholt:

mit Mokka-PhantomJS ausführen zu können, ändern

mocha.run(); 

zu

if (mochaPhantomJS) { 
    mochaPhantomJS.run(); 
} 
else { 
    mocha.run(); 
} 
+0

Hallo, ich sehe dieses Problem auch. Aber ich habe gerade Mocha-Phantomjs und Phantomjs mit npm installiert. Ich weiß nicht, wo ich SpecRunner.js finden kann und was genau es tut. Kannst du bitte Erklären? – EternallyCurious

+0

@EnternallyCurious, ich bin mir nicht sicher, ob deine Frage im Rahmen dieser Frage liegt. Ein neues öffnen? – mnoble01

+0

Der Link ist jetzt https://gist.github.com/michaelcox/3800736/#gistcomment-859304 (#comment hat sich zu #gistcomment geändert) –

0

Vielen Dank für diese Info, habe ich versucht, die oben, aber es scheiterte im Browser "mochaPhantomJS ist nicht definiert". Eine schnelle zwicken wie unten und es funktioniert gut:

if(typeof(mochaPhantomJS)!=="undefined") 
{ 
    mochaPhantomJS.run(); 
} 
else 
{ 
    mocha.run(); 
}