如果跟踪事件被正确触发,我在找到使用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(?????);
});
希望有人可以帮我解决这个问题=)干杯
答案 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();
});