2016-05-23 4 views
0

私はモカ&チャイとNodeJs上のユニットテストを実行しよう...モカ/チャイto.not.throw(TypeError例外)奇妙な行動

私の最初のテストスイートは、コンストラクタ関数の戻り値かどうかを検証することであるかありませんパラメータの型に応じてTypeErrorを返します。私がテストし

/* ./test/entity/Point.js */ 

"use strict"; 

var expect = require("chai").expect; 
var Point = require("./../entity/Point"); 

describe("Point entity", function() { 
    it("x parameter must not be string", function() { 
     var fn = function() { var p = new Point("5", 40); }; 
     expect(fn).to.throw(TypeError); 
    }); 

    it("y parameter must not be string", function() { 
     var fn = function() { var p = new Point(5, "40"); }; 
     expect(fn).to.throw(TypeError); 
    }); 

    it("x and y parameters must be number", function() { 
     var fn = function() { var p = new Point(5, 40); }; 
     expect(fn).to.not.throw(TypeError); 
    }); 
}); 

コンストラクタ関数:

/*./entity/Point.js */ 

"use strict"; 

function Point(x, y) { 
    // Type validation 
    if(x && !(typeof x === "number")) { 
     throw new TypeError("x is expected to be a number"); 
    } 
    if(y && !(typeof y === "number")) { 
     throw new TypeError("y is expected to be a number"); 
    } 

    // instantiation 
    this.x = x; 
    this.y = y; 
} 

module.exports = Point; 

最初のテストはokです。 2番目のテストはOKです。 しかし、3番目のテスト私に奇妙なアサーションエラーを送信します。

 
    Point entity 
    V x parameter must not be string 
    V y parameter must not be string 
    1) x and y parameters must be number 


    2 passing (67ms) 
    1 failing 

    1) Point entity x and y parameters must be number: 
    AssertionError: expected [Function] to not throw 'TypeError' but 'TypeError: Point is not a function' was thrown 

     at Context. (C:\Users\Cedric\Documents\NodeProjects\SqueezeParking\test\entity\Point.js:19:32) 
     at callFn (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:326:21) 
     at Test.Runnable.run (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:319:7) 
     at Runner.runTest (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:422:10) 
     at C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:528:12 
     at next (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:342:14) 
     at C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:352:7 
     at next (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:284:14) 
     at Immediate._onImmediate (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:320:5) 

私はNodeJsは、モジュールの代わりに、チャイをアサート使用した場合、私はまた、アサーションエラーを取得:私はチャイを使用するか、またはNodeJsモジュールを主張した場合

 
    Point entity 
    V x parameter must not be string 
    V y parameter must not be string 
    1) x and y parameters must be number 


    2 passing (55ms) 
    1 failing 

    1) Point entity x and y parameters must be number: 
    AssertionError: Got unwanted exception (TypeError).. 
     at _throws (assert.js:341:5) 
     at Function.assert.doesNotThrow (assert.js:359:3) 
     at Context. (C:\Users\Cedric\Documents\NodeProjects\SqueezeParking\test\entity\Point.js:19:16) 
     at callFn (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:326:21) 
     at Test.Runnable.run (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:319:7) 
     at Runner.runTest (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:422:10) 
     at C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:528:12 
     at next (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:342:14) 
     at C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:352:7 
     at next (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:284:14) 
     at Immediate._onImmediate (C:\Users\Cedric\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:320:5) 

をモカ外で、3番目のテストは、TypeError例外をスローしません:

/*./server.js */ 

var expect = require("chai").expect; 
var Point = require("./entity/Point"); 
var fn = function() { 
    var p = new Point(10, 20); 
} 
expect(fn).to.not.throw(TypeError); 

...この奇妙なはモカから来る例外TypeErrorが、なぜ、どのように私は理解していないようです誰かがアイデアを持っていますか?

答えて

1

あなた自身がテストコードをモジュールとしてインポートしています。これに./test/entity/Point.jsの開始時に、あなたのコードを変更、説明するために:

exports.foo = "foo"; 
var expect = require("chai").expect; 
var Point = require("./../entity/Point"); 
console.log(Point); 

そして、あなたは、出力取得します:パスはあなたがにテストするコードを必要とするために使用

{ foo: 'foo' } 
[... followed by the tests passing and failing ...] 

変更をvar Point = require("../../entity/Point");となり、テストは合格となります。

+0

ハハ、いいキャッチ= D – robertklep

+0

ああ私の神!私は自分自身を恥じている! ご協力ありがとうございます@ルイス。 –