سؤال

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.

هل كانت مفيدة؟

المحلول 2

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)

نصائح أخرى

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

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:

  • Enjoy the trouble
  • Commented out all failed testing cases
  • Try to use more javascript directly
  • Try to use other unit test tools, such as nodeunit
  • It sounds stupid, but when debugging becomes terrible, all happens, at least to me.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top