I am trying to run a sample CoffeeScript unit test for a CoffeeScript sample class hierarchy, using Mocha. But I keep getting errors and it doesn't seem I can fix them without some help. This is my sample CoffeeScript file, in /src folder :
#Animal.coffee
class Animal
constructor: (@name) ->
move: (meters) ->
console.log @name + " moved #{meters}m."
class Snake extends Animal
move: ->
console.log "Slithering..."
super 5
class Horse extends Animal
move: ->
console.log "Galloping..."
super 45
#module.exports = new Snake()
module.exports.Snake = Snake
And this is the CoffeeScript Unit Test in /Tests folder :
#AnimalTest.coffee
should = require 'should'
{ Snake } = require "../src/Animal"
describe 'sample', ->
it 'should pass', ->
snake = new Snake "Venomous python"
snake.should.be.an.instanceOf(Snake)
I have installed all these libraries globally. So when I execute this command through command line (Windows 7) :
Desktop>mocha --compilerscoffee:coffee-script/register Tests
It throws me this error:
desktop\Tests\sampleTest.coffee:15
snake.should.be.an.instanceOf(Snake);
^
ReferenceError: snake is not defined
at Object.<anonymous> (c:\users\ap\desktop\Tests\AnimalTest.coffee:8:3)
at Object.<anonymous> (c:\users\ap\desktop\Tests\AnimalTest.coffee:2:1)
at Module._compile (module.js:456:26)
at Object.loadFile (C:\Users\ap\AppData\Roaming\npm\node_modules\coffee-sc
ript\lib\coffee-script\register.js:16:19)
at Module.load (C:\Users\ap\AppData\Roaming\npm\node_modules\coffee-script
\lib\coffee-script\register.js:45:36)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\lib\mocha.js:172:27
at Array.forEach (native)
at Mocha.loadFiles (C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\lib
\mocha.js:169:14)
at Mocha.run (C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\lib\mocha
.js:356:31)
at Object.<anonymous> (C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\
bin\_mocha:359:16)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
I am using CoffeeScript version 1.7.1, Mocha version 1.18.2 and Node version 0.10.26. I have tried looking everywhere and tried all combinations between the tests, but I cannot figure out for my life how to make it create the objects successfully and run the test.
For reference, I tried these, of all other combinations : Requiring CoffeeScript file from within another CoffeeScript file with nodejs
How to check for class inheritance in Coffeescript Mocha Test?
Can someone point out what could possibly be wrong?
Update 1: Modified everything as pointed by dule, but now I get this error:
module.js:340
throw err;
^
Error: Cannot find module 'should'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (C:\Users\ap\Desktop\Tests\AnimalTest.coffee:2:11)
at Object.<anonymous> (C:\Users\ap\Desktop\Tests\AnimalTest.coffee:2:1)
at Module._compile (module.js:456:26)
at Object.loadFile (C:\Users\ap\AppData\Roaming\npm\node_modules\coffee-sc
ript\lib\coffee-script\register.js:16:19)
at Module.load (C:\Users\ap\AppData\Roaming\npm\node_modules\coffee-script
\lib\coffee-script\register.js:45:36)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\lib\mocha.js:172:27
at Array.forEach (native)
at Mocha.loadFiles (C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\lib
\mocha.js:169:14)
at Mocha.run (C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\lib\mocha
.js:356:31)
at Object.<anonymous> (C:\Users\ap\AppData\Roaming\npm\node_modules\mocha\
bin\_mocha:359:16)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
Update 2: I made the following changes to the AnimalTest script and the test passed.
should = require ("../npm/node_modules/should/should")
{ Snake } = require ("../src/Animal.coffee")
describe 'sample', ->
it 'should pass', ->
console.log(new Snake "Venomous python")
However, for some reason, creating an object and saving it for use, still fails. And I get the same snake not defined error.
requires are relative to the the current file, not relative to the project root (see my answer below), but that isn't your only problem...