2012-03-03 22 views
0

CoffeeScriptに次のコードを持つrenderというこの関数があります。CoffeeScript(およびJS)で関数が呼び出されないことのテスト

@afterRender() if @afterRender 

は、どのように私はそれが存在しない場合afterRenderが呼び出されていないことをテストすることができます。これは、1つが定義されている場合は、以下に示すようにだけは、afterRender関数を呼び出すことバックボーンビューにありますか?ここで

は、正のテストです:

it 'calls afterRender when defined', -> 
    called = false 
    @view.afterRender = -> called = true 
    @view.render() 
    expect(called).toBeTruthy() 

しかし、私はテストに良い方法を思い付くしようとしたすべてが私を失敗しました。

私はsinon.jsを使用していますので、スパイ、モック、スタブを使用することができます。

アイデア?

+0

'@afterRender()@ afterRender'行は' render'方法であれば? –

+0

ちょっと@TrevorBurnham、この情報を省略して申し訳ありません。はい、そうです! – kolrie

答えて

0

あなたは、第二に(手動called変数でやって何がcurrenltyだ)最初のケースでは、あなたのケース-こと、それが一度呼ばれていますの両方をテストするためにmockを使用することができ、それが呼び出されることはありませんだと。

最初のケース:

sinon.mock(@view).expects('afterRender').once() 
@view.render() 

第二の場合:

sinon.mock(@view).exepcts('afterRender').never() 
@view.render() 
+0

私はそれを前に試しました。 'TypeError:未定義のプロパティafterRenderを関数としてラップしようとしました。 'どうやら、存在しない関数には期待できません。(そして、テストには存在しないようにする必要があります) – kolrie

+0

その場合、 '@ view.afterRender'が' undefined'ですか?しかし、あなたが必要としない限り、メソッドを定義してから呼び出す方が良い(私にとってはより良いデザインのように思える)ことは、あなたが良いと思っています。 –

+0

実際には、あなたがテストしたいものをテストしないと思います(関数が呼び出された場合と同じですが、未定義ではありません)。その場合、あなたが設定した同じ 'called'テストを使用して、真実ではなく偽であることを確認できませんか?私はまだ関数を未定義にしておくことは良い考えではないと思います(私の前のコメントを見てください)。 –