2017-02-26 6 views
1

私は、Chaiライブラリを使って、正しくテストする方法を完全に理解できていないようです。あるいは、プログラミングのファンダメンタルズから何かを逃してしまうかもしれません。ちょっと混乱します。Chai test failed with arguments

it("should check parameter type", function(){ 
    expect(testFunction(1)).to.throw(TypeError); 
    expect(testFunction("test string")).to.throw(TypeError); 
}); 

そして、これは私がテストだ関数である:私は合格するテストのために期待していたが、私はちょうどにそのスローエラーを見ている

function testFunction(arg) { 
    if (typeof arg === "number" || typeof arg === "string") 
     throw new TypeError; 
} 

テストを考えると

コンソール:

TypeError: Test 
    at Object.testFunction (index.js:10:19) 
    at Context.<anonymous> (test\index.spec.js:31:28) 

誰かが私にこれを説明できますか?

答えて

2

あなたtestFunctionと呼ばれ、 - エラーがスローされない場合 - 結果expectに渡されます。したがって、エラーがスローされると、expectは呼び出されません。

あなたはtestFunctionを呼び出しますそのexpectに関数を渡す必要があります。

it("should check parameter type", function(){ 
    expect(function() { testFunction(1); }).to.throw(TypeError); 
    expect(function() { testFunction("test string"); }).to.throw(TypeError); 
}); 

expect実装は、それが関数に渡されていて、それを呼び出すことがわかります。次に、期待値/アサーションを評価します。

+0

ありがとうございました。この種の型チェックでTypeErrorを投げるのは普通ですか?私はprod env(node.jsに基づいて)にその種のロジックを使用すると、アプリケーション全体が終了する原因になるのでしょうか? –

+1

予期しない引数を受け取った場合に型エラーをスローすることが適切です。これはNodeの['path'](https://nodejs.org/api/path.html)APIが実行するものです。エラーが処理されていない場合は、プロセスは終了します。 – cartant

関連する問題