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
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();
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With