mocha init timeout with mocha-phantomjs

て烟熏妆下的殇ゞ 提交于 2019-12-04 19:10:47

问题


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

回答1:


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



回答2:


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.




回答3:


Thanks for this info, I tried the above but it failed in browser saying "mochaPhantomJS is undefined". A quick tweak as per below and it works well:

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


来源:https://stackoverflow.com/questions/15657458/mocha-init-timeout-with-mocha-phantomjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!