5

ここでは、Mocha と Coffeescript/Javascript で明らかな何かが欠けています。

私はというファイルを持っています/static/js/ss.coffeeそれは非常に単純で、関数は1つだけです:

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;
}

関数は正しく動作しますが、今日このプロジェクトのテストを開始する必要があると判断したため、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")

私の結果は次のとおりであるため、何かが正しくありません。

 $  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      

存在しないファイル名に変更すると、「モジュールが見つかりません」というエラーが発生するため、ファイルを正しく見つけています。

に、またはその逆に変更しようとしsortRowCol(a,b)ましたが、役に立ちませんでした。#sortRowCol(a, b)ドキュメント (リンク) では # がそこで何をしているのかを実際には説明していません。

ss.coffee ファイルの参照方法に何か問題があるはずですが、わかりません。

4

1 に答える 1

11

ノードでスクリプトを実行することによりrequire、スクリプトは他のモジュールsortRowColと同様に扱われ、クロージャー内でローカルとして分離されます。スクリプトは、exportsまたはmodule.exportsを使用できるようにする必要がありますmocha

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

if (typeof module !== 'undefined' && module.exports != null) {
    exports.sortRowCol = sortRowCol;
}
ss = require "../static/js/ss.coffee"
sortRowCol = ss.sortRowCol

# ...

はどうかと言うと...

ドキュメント(リンク)は、その#がそこで何をしているのかを実際には説明していません、[...]

AFAIK、a#は通常、それがメソッドであることを意味するために使用されConstructor#methodNameます。ただし、それがここに当てはまるかどうかはわかりません。

于 2013-01-07T23:28:17.850 に答える