2016-04-18 2 views
0

Вот спецификации я бегужасмин триггером щелчок мыши не работает на <a>

describe("Test", function() { 

    beforeEach(function(){ 
     loadFixtures('modal.html'); 
    }); 

    it ("click a tag", function(){ 

     var spy = spyOnEvent($('.modal-link'), 'click'); 
     $('.modal-link').trigger('click'); 
     expect('click').toHaveBeenTriggeredOn($('.modal-link')); 
     expect(spy).toHaveBeenTriggered(); 

    }); 

}); 

Внутри светильника (modal.html), это выглядит так

<a class="modal-link">Test Link</a> 

Тест терпит неудачу с этим ошибка:

Expected event [object Object] to have been triggered on [object Object]at Object.<anonymous> 

Expected event click to have been triggered on [object Object] at Object.<anonymous> 

Но когда я заменяю тег на div, span или p, тест проходит.

<div class="modal-link">Test Link</div> 

Есть ли причина, по которой тег не может быть нажат в моем тесте?

правка 19/04: Я использую Карма запустить тест, вот конфигурационный файл

module.exports = function(config) { 
    config.set({ 
    frameworks: ['jquery-1.11.0', 'jasmine-jquery', 'jasmine'], 
    reporters: ['mocha'], 
    browsers: ['PhantomJS'], 
    plugins: [ 
     // Karma will require() these plugins 
     'karma-jasmine', 
     'karma-jasmine-jquery', 
     'karma-jquery', 
     'karma-phantomjs-launcher', 
     'karma-mocha-reporter' 
    ], 
    preprocessors: { 
     'test/spec/**/*.html': ['html2js'] 
    }, 
    autoWatch: true, 
    files: [ 
     {pattern: 'app/libs/jquery.min.js', watched: true, included: true, served: true}, 
     {pattern: 'app/libs/bootstrap/js/bootstrap.js', watched: true, included: true, served: true}, 
     {pattern: 'app/js/myjavascript.js', watched: true, included: true, served: true}, 
     {pattern: 'test/spec/**/*.js', watched: true, included: true, served: true}, 
     {pattern: 'test/spec/**/*.html', watched: true, included: false, served: true} 
    ], 

    }); 
}; 
+0

Какой браузер вы используете в ваших тестах? – MBielski

+0

jasmine default не понимает методы jquery, вы используете библиотеку jq jasmine? –

+0

@MBielski, я пробовал Chrome, Firefox и PhantomJS, но тест продолжает терпеть неудачу. –

ответ

0

Ваш конфиг таргетингом PhantomJS, который имеет проблемы нажав на вещи. Полный ответ здесь: How to ng-click an A directive in a PhantomJS test но короткий его чтобы использовать эту функцию в тестах:

//Need to create a cross browser click() function no .click() in PhantomJS 
function click(el){ 
    var ev = document.createEvent('MouseEvent'); 
    ev.initMouseEvent(
     'click', 
     true /* bubble */, true /* cancelable */, 
     window, null, 
     0, 0, 0, 0, /* coordinates */ 
     false, false, false, false, /* modifier keys */ 
     0 /*left*/, null 
    ); 
    el.dispatchEvent(ev); 
} 
+0

Я пытаюсь использовать это, но я понимаю, что 'el.dispatchEvent не является функцией', какой-либо намек? – teone

+0

Это означает, что ваш целевой элемент не найден. Если вы пройдете через него, вы обнаружите, что «el» не определен. – MBielski

Смежные вопросы