2017-12-12 3 views
2

ユニットテストにJasmine Jqueryを使用しています。私はすでに試したユニットテストにclipboard.js( 'success')またはon( 'error')をトリガー

(function() { 
    $(document).ready(copyToClipboard); 

    function copyToClipboard(){ 
    var clipboard = new Clipboard('#d_clip'); 

    clipboard.on('success', function(e) { 
     $(e.trigger).text("Copied!"); 
     e.clearSelection(); 
     setTimeout(function() { 
     $(e.trigger).text("Copy"); 
     }, 2500); 
    }); 

    clipboard.on('error', function(e) { 
     $(e.trigger).text("Error copying"); 
     setTimeout(function() { 
     $(e.trigger).text("Copy"); 
     }, 2500); 
    }); 
    } 
})(); 

:私は、次のコードを持っている

beforeEach(function() { 
    setFixtures("<button type='button' id='d_clip'>Copy</button>") 
    clipboard = new Clipboard('#d_clip'); 
    }); 

    it('should change text to copied', function() { 
    spyOn(clipboard,'on'); 
    $('#d_clip').trigger('click'); 
    expect($('#d_clip').text()).toEqual('Copied!') 
    }); 

をしかし、私はこのエラーを取得しています:私は手動でクリックしたときに

Expected 'Copy' to equal 'Copied!'.

それは動作します。 Chromeデベロッパーコンソールで$('#d_clip').trigger('click');を実行しても機能します。

clipboardがユニットテスト用に何もしていないように見えます。私はそれを行う方法を理解することはできません。

私がテストしたいのは?

  1. クリックして、テキストが「コピーされました」ことを確認します。エラーが発生した場合は「エラーコピー」となります。

これは、Ruby on Railsの上にあるので、私のようにJSの単体テストを実行します。直接あなたの質問に答えるために

rake jasmine:ci

+0

テストなしでクリックすると動作しますか?どのようにテストが実行されますか? – pfg

+0

はい、それをクリックすると動作します。 Chromeデベロッパーコンソールで '$( '#d_clip')。trigger( 'click');を実行しても機能します。 Ruby on Railsでこれをやっているので、私は 'rake jasmine:ci'をやっています –

答えて

1

、私はjasmine's done() callbackをしようとするだろう。仕様を非同期にすることができます。 (スパイは、このために不必要であることに注意してください。)

it("should change text to 'copied'", function(done) { 
    $('#d_clip').trigger('click'); 
    clipboard.on('success', function() { 
     expect($('#d_clip').text()).toEqual('Copied!') 
     done(); 
    }); 
}); 

をスタイルの観点から、しかし、私はあなたが2つの小さなスペック、トリガがcopyToClipboard()から呼び出されたかどうかをテスト1、および1つにこれを分割推薦コールバックを直接コールし(変数を抽出します)、値を更新するかどうかをチェックします。私には統合テストのような2つの感覚を組み合わせます。

関連する問題