2013-03-27 34 views
10

Mam następujący testrunner.html:mokka Timeout startowych z mocha-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> 

_runner.js wygląda następująco:

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

}); 

StringCalculator.specs.js to:

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

I to sama StringCalculator.js (z próbek mokka):

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

Podczas uruchamiania specyfikacji w przeglądarce wywołującej testrunner.html wszystko działa zgodnie z oczekiwaniami. Uruchamiając mocha-phantomjs client/specs/testrunner.html na OS X, pojawia się następujący błąd:

Failed to start mocha: Init timeout

Co może mi tu brakuje?

Próbowałem również mocha-phantomjs http://httpjs.herokuapp.com, który kończy się niepowodzeniem z tym samym błędem.

Aktualizacja: Jeśli dzwonię mocha-phantomjs http://localhost:81/client/specs/testrunner.html ja też pojawia się następujący błąd w konsoli:

RangeError: Maximum call stack size exceeded. 

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

Odpowiedz

1

This file pokazuje, jak z niego korzystać.

I dla mnie NodeJS 0.10.x wydaje się nie działać z tym. Po przejściu na NodeJS 0.8.8 wszystko działa zgodnie z oczekiwaniami.

Korzystanie z aktualnych wersji mocha-phantomjs i PhantomJS teraz wszystko działa dobrze.

+0

Węzeł Użytkownicy 0.10.x nie są całkowicie zniechęceni - jestem pewien, że było to prawdą w tym czasie. Ale dziś jestem na 0.10.13, a powyższe rozwiązanie, aby użyć mochaPhantomJS.run(), działało dla mnie. – laurelnaiad

+0

Od czasu do czasu otrzymuję losowe limity czasu (gra słów nie jest przeznaczona). Używanie najnowszych mocha-phantomjs itp. Z limitem czasu wynoszącym 10000. – Till

9

Otrzymałem ten sam błąd Failed to start mocha podczas uruchamiania mocha-phantomjs przez pakiet npm grunt-mocha-phantomjs. Znaleziono rozwiązanie here.

Powtarzające się tutaj odniesienie:

biec mocha-phantomjs zmień

mocha.run(); 

do

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

Cześć, widzę też ten problem. Ale właśnie zainstalowałem Mocha-phantomjs i phantomjs używając npm. Nie wiem, gdzie mogę znaleźć SpecRunner.js i co dokładnie robi. Czy możesz wyjaśnić? – EternallyCurious

+0

@EternallyCurious, nie jestem pewien, czy Twoje pytanie wchodzi w zakres tego. Otwórz nowy? – mnoble01

+0

Link jest teraz https://gist.github.com/michaelcox/3800736/#gistcomment-859304 (#comment został zmieniony na #gistcomment) –

0

Dzięki tej informacji, próbowałem wyżej, ale nie udało się w przeglądarce powiedzenie "mochaPhantomJS jest niezdefiniowane". Szybka korekta jak poniżej i działa dobrze:

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