2013-03-27 20 views
10

Ho il seguente testrunner.html:moka timeout init con la moka-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> 

Il _runner.js assomiglia a questo:

// 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(); } 
    }); 

}); 

Il StringCalculator.specs.js è questo:

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); 
      }); 
     }); 
    }); 
}); 

E questo è lo StringCalculator.js stesso (dai campioni di moka):

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; 
     } 
    } 
}); 

Quando si esegue le specifiche in un browser chiamando testrunner.html, tutto funziona come previsto. Quando si esegue mocha-phantomjs client/specs/testrunner.html su OS X, ottengo il seguente errore:

Failed to start mocha: Init timeout

quello che potrebbe mi manca qui?

Ho anche provato mocha-phantomjs http://httpjs.herokuapp.com che non riesce con lo stesso errore.

Aggiornamento: Se sto chiamando mocha-phantomjs http://localhost:81/client/specs/testrunner.html Inoltre ottengo il seguente errore sulla console:

RangeError: Maximum call stack size exceeded. 

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

risposta

1

This file mostra come usarlo.

E per me, NodeJS 0.10.x non sembra funzionare con esso. Dopo il passaggio a NodeJS 0.8.8, tutto funziona come previsto.

Utilizzando le versioni correnti di mocha-phantomjs e PhantomJS ora tutto funziona correttamente.

+0

I nodi 0.10.x utenti non sono completamente scoraggiati - Sono sicuro che questo era vero al momento. Ma oggi sono a 0.10.13 e la soluzione sopra per usare mochaPhantomJS.run() ha funzionato per me. – laurelnaiad

+0

Ho ancora dei timeout casuali di tanto in tanto (nessun gioco di parole). Uso anche degli ultimi mocha-phantomjs, ecc. Con un timeout di 10000. – Till

9

Stavo ricevendo lo stesso errore Failed to start mocha durante l'esecuzione di mocha-phantomjs tramite il pacchetto npm grunt-mocha-phantomjs. Trovato la soluzione here.

ripetuto qui per riferimento:

Per eseguire con la moka-phantomjs, cambiare

mocha.run(); 

a

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

Ciao, sto riscontrando anche questo problema. Ma ho appena installato Mocha-phantomjs e phantomjs usando npm. Non so dove posso trovare SpecRunner.js e cosa fa esattamente. Puoi spiegare per favore? – EternallyCurious

+0

@EternallyCurious, non sono sicuro che la tua domanda rientri nello scopo di questo. Aprirne uno nuovo? – mnoble01

+0

Il link è ora https://gist.github.com/michaelcox/3800736/#gistcomment-859304 (#comment è cambiato in #gistcomment) –

0

Grazie per queste informazioni, ho provato quanto sopra, ma è venuto a mancare in del browser dicendo "mochaPhantomJS non è definito". Un rapido tweak come di seguito e funziona bene:

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