Как утверждать, что шпион вызывается с событием по клику, используя jasmine?

Я пишу простой обработчик кликов, и мне нужно, чтобы событие передавалось в (вот так)

Thing = function($){

    var MyObject = function(opts){
        this.opts = opts;
    };

    MyObject.prototype.createSomething = function(){
        var that = this;
        $('#some_dom_element').live('click', function(e) {
            that.doStuff(e);
        });
    };

    MyObject.prototype.doStuff = function(e) {
        //do some javascript stuff...
        e.preventDefault();
    };

    return MyObject;

}(jQuery);

В настоящее время в моей спецификации жасмина у меня есть кое-что, чтобы шпионить за функцией, которая, как я ожидаю, вызывается (, но поскольку она вызывается с e -не без аргументов -, мое утверждение терпит неудачу)

    it ("live click handler added to the dom element", function(){
        var doSpy = spyOn(sut, 'doStuff');
        sut.createSomething();
        $("#some_dom_element").trigger('click');
        expect(doSpy).toHaveBeenCalledWith();
    });

Как я могу исправить этот «toHaveBeenCalledWith», чтобы он работал так, как я ожидаю?


ОБНОВЛЕНИЕ

Я не мог заставить принятый ответ работать как есть, но я смог немного изменить его, и ниже приведен мой 100% рабочий пример

    it ("should prevent default on click", function(){
        var event = {
            type: 'click',
            preventDefault: function () {}
        };
        var preventDefaultSpy = spyOn(event, 'preventDefault');
        sut.createSomething();
        $("#some_dom_element").trigger(event);
        expect(preventDefaultSpy).toHaveBeenCalledWith();
    });
12
задан Brian Tompsett - 汤莱恩 9 November 2019 в 15:10
поделиться