Jasmine jquery - 监视具有数据属性的事件

jasmine jquery - spy on event with data attribute

本文关键字:数据属性 事件 jquery 监视 Jasmine      更新时间:2023-09-26

如果正确触发以下事件,我在寻找使用 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(?????);
});

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

问题是,在这两种情况下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();
});