5 votes

comment tester un fichier javascript basique avec mocha ?

Je rate quelque chose d'évident ici avec Mocha et Coffeescript/Javascript.

J'ai un fichier dans /static/js/ appelé ss.coffee C'est très simple, une seule fonction :

function sortRowCol(a, b) {
    if (a.r == b.r)
        if (a.c == b.c)
            return 0;
        else if (a.c > b.c)
            return 1;
        else return -1;
    else if (a.r > b.r)
        return 1;
    else return -1;
}

La fonction fonctionne correctement, mais j'ai décidé que je devais commencer à tester ce projet aujourd'hui, donc j'ai mis un fichier de test mocha :

require "../static/js/ss.coffee"

chai = require 'chai'
chai.should()

describe 'SS', ->
    describe '#sortRowCol(a,b)', ->
      it 'should have a sorting function', ->
        f = sortRowCol
        debugger
        console.log 'checking sort row'
        f.should.not.equal(null, "didn't find the sortRowCol function")
    describe 'sortRowCol(a, b)', ->
      it 'should return -1 when first row is less than second', ->
        a = {r: 2, c: "A"}
        b = {r: 1, c: "A"}
        r = sortRowCol a, b
        r.should.equal(-1, "didn't get the correct value")

Quelque chose ne va pas, car mes résultats le sont :

 $  mocha --compilers coffee:coffee-script ./test/ss.coffee -R spec           
 SS                                                                      
   #sortRowCol(a,b)                                                              
     1) should have a sorting function                                           
   sortRowCol(a, b)                                                              
     2) should return -1 when first row is less than second                      

 × 2 of 2 tests failed:                                                          

 1) SS #sortRowCol(a,b) should have a sorting function:                 
    ReferenceError: sortRowCol is not defined      

Il trouve le fichier correctement, car il affichera le message d'erreur "Cannot find module" si je change ce nom en un nom de fichier inexistant.

J'ai essayé de changer sortRowCol(a,b) a #sortRowCol(a, b) et vice versa, n'a pas aidé. La documentation ( lien ) n'explique pas vraiment ce que ce # fait là, est-ce juste un idiome ruby qui est là pour une raison quelconque ?

Il doit y avoir un problème dans la façon dont je fais référence au fichier ss.coffee, mais je ne le vois pas.

11voto

Jonathan Lonowski Points 45253

Par require Si vous utilisez le script dans Node, il sera traité comme n'importe quel autre script. module en isolant sortRowCol comme un local dans une fermeture. Le script devra utiliser exports o module.exports pour le mettre à la disposition de mocha :

function sortRowCol(a, b) {
    // ...
}

if (typeof module !== 'undefined' && module.exports != null) {
    exports.sortRowCol = sortRowCol;
}

ss = require "../static/js/ss.coffee"
sortRowCol = ss.sortRowCol

# ...

Quant à...

La documentation (lien) n'explique pas vraiment ce que ce # fait là, [...].

AFAIK, un # est généralement utilisé pour impliquer qu'il s'agit d'une méthode -- par exemple, Constructor#methodName . Pas vraiment sûr que cela s'applique ici, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X