2

次のイベントが正しくトリガーされた場合、jasmine-jquery を使用してテストする適切な方法を見つけるのに少し苦労しています

$(document).on('click', '[data-test]', function(e) {
    ...
});

基本的に、次のように見える 2 つのテストを書きたいと思います (????? の部分はすべて、私にとっては謎です)。

spyOnEvent(?????????????, 'click');
var fixture = setFixtures('<a data-test="whatever"></a> <a class="dummy"></a>');
var $elem = fixture.find('a[data-test="whatever"]');
var $dummy = fixture.find('.dummy');

it('should be triggered', function() {
    $elem.click();
    expect('click').toHaveBeenTriggeredOn(?????);
});

it('should not be triggered', function() {
    $dummy.click();
    expect('click').not.toHaveBeenTriggeredOn(?????);
});

誰かがこれで私を助けてくれることを願っています =) 乾杯

4

1 に答える 1

2

問題はtoHaveBeenTriggeredOn、両方のケースで true になり、テストでクリックをトリガーすることです。また、これはテストしたいものではありません。クリック ハンドラーが起動されたことをテストする必要があります。通常、これはクリック ハンドラー関数の結果をテストすることによって行われます。たとえば、クラスが変更されたこと。

$(document).on('click', '[data-test]', function(e) {
   $(this).addClass('test')
});

var fixture = setFixtures('<a data-test="whatever"></a> <a class="dummy"></a>');
var $elem = fixture.find('a[data-test="whatever"]');
var $dummy = fixture.find('.dummy');

it('should be triggered', function() {
    $elem.click();
    expect($elem.hasClass()). toBeTruthy();
});

it('should not be triggered', function() {
    $dummy.click();
    expect(dummy.hasClass()).toBeFalsy();
});
于 2013-09-19T06:44:28.737 に答える