2016-03-25 8 views
2

私はChai.shouldを使用していますが、例外をテストする必要がありますが、何を試しても動作しません。 docsだけで、私はあなたがここでChai.shouldでエラーをスローする方法

new MySingleton(); 

をしようとするとエラーがスローされます。このシングルトンクラスは、今、私がしたいエラー

constructor(enforcer) { 
    if(enforcer !== singletonEnforcer) throw 'Cannot construct singleton'; 
    ... 

をスローコンストラクタである必要がありexpect :(

を説明しますこれが起こることを確認してください。

it('should not be possible to create a new instance',() => { 
    (function() { 
     new MySingleton(); 
    })().should.throw(Error, /Cannot construct singleton/); 
}); 

または

new MySingleton().should.throw(Error('Cannot construct singleton'); 

これらの作業はありません。これはどうですか?助言がありますか ?

+0

この質問は重複していません。 'subject.should.throw'スタイルについて質問しています。もう一つの疑問は 'expect'スタイルです。 –

答えて

2

ここでの問題は、関数が直接実行され、chaiがtry{} catch(){}ブロックを囲むことを効果的に防止できることです。

エラーは、呼び出しがshould -Propertyに到達する前にスローされます。

it('should not be possible to create a new instance',() => { 
    (function() { 
     new MySingleton(); 
    }).should.throw(Error, /Cannot construct singleton/); 
}); 

またはこの:

MySingleton.should.throw(Error('Cannot construct singleton'); 

これはチャイはあなたのための関数呼び出しを処理することができます

はこのようにそれを試してみてください。

+1

追加したいのは、誰かが関数にパラメータを渡そうとしている場合、 'myfunc.bind(foo、bar).should.throw(...)'を実行するだけです。 –

0

私はこれが答えられた質問だと知っていますが、私はまだ私の2セントを投げたいと思います。

スタイルガイドには、http://chaijs.com/guide/styles/#should-extrasというセクションがあります。それでは、これは実際にのように見えるん:

should.Throw(() => new MySingleton(), Error); 

それは受け入れ答えからすべてが異なるではありません、しかし私はそれが少し読みやすく見つけ、およびそのガイドラインに沿って、より。

関連する問題