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.
Looks like you have a number of issues. Try the following:
src/animal.coffee:
class Animal
constructor: (@name) ->
move: (meters) ->
console.log @name + " moved #{meters}m."
class Snake extends Animal
move: ->
console.log "Slithering..."
super 5
module.exports.Snake = Snake
tests/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)
Then run (from proj root):
mocha --compilers coffee:coffee-script/register tests
So, this is totally weird. An explanation is more than welcome! This is what I did and the test passed :
should = require ("../npm/node_modules/should/should")
{ Snake } = require ("../src/Animal.coffee")
describe 'sample', ->
it 'should pass', ->
(new Snake "Venomous python").should.be.an.instanceOf(Snake)
I got test case broken randomly when using CoffeeScript 1.8.0, mocha 1.21.4.
The test case can be approved by hand, but it failed in mocha with strange exceptions like "undefined function...". Too trivial to copy the long long fails, exceptions, stack traces...
To solve it:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.