Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mocha init timeout with mocha-phantomjs

I have the following testrunner.html:

<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>

The _runner.js looks like this:

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

});

The StringCalculator.specs.js is this:

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

And this is the StringCalculator.js itself (from the mocha samples):

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

When running the specs in a browser calling testrunner.html, everything works as expected. When running mocha-phantomjs client/specs/testrunner.html on OS X, I get the following error:

Failed to start mocha: Init timeout

What may I'm missing here?

I also tried mocha-phantomjs http://httpjs.herokuapp.com which fails with the same error.

Update: If I'm calling mocha-phantomjs http://localhost:81/client/specs/testrunner.html I also get the following error on the console:

RangeError: Maximum call stack size exceeded.

http://localhost:81/client/lib/chai.js?v=123423553533535:2601
Failed to start mocha: Init timeout
like image 456
Alexander Zeitler Avatar asked Mar 27 '13 11:03

Alexander Zeitler


2 Answers

I was getting the same Failed to start mocha error when running mocha-phantomjs through the grunt-mocha-phantomjs npm package. Found the solution here.

Repeated here for reference:

To run with mocha-phantomjs, change

mocha.run();

to

if (mochaPhantomJS) {
  mochaPhantomJS.run();
}
else {
  mocha.run();
}
like image 129
mnoble01 Avatar answered Oct 23 '22 13:10

mnoble01


This file shows how to use it.

And for me, NodeJS 0.10.x does not seem to work with it. After switching to NodeJS 0.8.8, everything works as expected.

Using the current versions of mocha-phantomjs and PhantomJS now everything works fine.

like image 26
Alexander Zeitler Avatar answered Oct 23 '22 12:10

Alexander Zeitler