jasmine jquery - 使用数据属性监视事件

时间:2013-09-18 16:43:51

标签: javascript jasmine jasmine-jquery

如果跟踪事件被正确触发,我在找到使用jasmine-jquery进行测试的正确方法时遇到了一些麻烦

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

基本上我想写两个看起来应该有点像这样的测试(所有的?????部分对我来说都是个谜):

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(?????);
});

希望有人可以帮我解决这个问题=)干杯

1 个答案:

答案 0 :(得分:2)

问题是toHaveBeenTriggeredOn在两种情况下都会成立,导致您在测试中触发点击。这也不是你想要测试的。您应该测试点击处理程序是否已被触发。通常,这将通过测试单击处理函数的结果来完成。例如,一个类已经改变。

$(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();
});