Как использовать Jasmine, чтобы шпионить за методами в плагине jquery - PullRequest
4 голосов
/ 09 августа 2011

У меня есть плагин, определенный как таковой

(function($){


    $.fn.robodisco = function(callerSettings) {

        var findVideos = function(params){ ... }

        $(".track").click(function(){
            ....
            findVideos(data) });

        ....

И в моем тесте я хочу шпионить за findVideos и проверить, вызывается ли он.Жасмин, однако, продолжает жаловаться, что не может найти метод.Вот моя спецификация:

it("searches for videos for track", function(){
      spyOn($.fn.robodisco, "findVideos");
      $lastTrack.click();
      expect($.fn.robodisco.findVideos).toHaveBeenCalled();
});

Мой синтаксис неверен?

Ответы [ 2 ]

2 голосов
/ 16 января 2015

Я знаю, что это старый пост, но я подумал, что отвечу, поскольку нашел решение, которое помогло мне с той же проблемой сегодня.У меня есть модульный тест жасмин, который гарантирует, что плагин dcjqaccordion инициализируется с определенным набором значений по умолчанию внутри провайдера AngularJS, который оборачивает плагин аккордеона.То, что я сделал, я высмеял элемент, который я передал плагину, с помощью шпиона, который заглушает функцию ожидаемого вызова плагина.

Тестовый код:

var mockElement = jasmine.createSpyObj('mockElement', ['dcAccordion']);

it('should initialize with prescribed defaults', function(){

        var expectedDefaults = {
            eventType: 'click',
            autoClose: false,
            saveState: true,
            disableLink: true,
            speed: 'slow',
            showCount: false,
            autoExpand: true,
            classExpand: 'dcjq-current-parent'
        };

        testDcjqaccordionProvider.initialize(mockElement);

        expect(mockElement.dcAccordion).toHaveBeenCalledWith(expectedDefaults);

    });

Рабочий код:

app.provider('dcjqaccordionWrapper', function(){

    //Lazy load our dependency on the plugin
    function getAccordionPlugin(){
        $.getScript('scripts/jquery.dcjqaccordion.2.7.js')
            .done(function(){
                console.log("Successfully loaded the dcjqaccordion plugin.");
            })
            .fail(function(){
                console.log("There was a problem loading the dcjqaccordion plugin.");
            });
    }


    var defaults = {
        eventType: 'click',
        autoClose: false,
        saveState: true,
        disableLink: true,
        speed: 'slow',
        showCount: false,
        autoExpand: true,
        classExpand: 'dcjq-current-parent'
    };

    this.initialize = function(inElement){
      inElement.dcAccordion(defaults);
    };

    this.$get = function(){
        getAccordionPlugin();
        return this;
    };
})
1 голос
/ 26 августа 2011

Проблема в том, что вы ищете findVideos как свойство метода robodisco, которого нет.Это локальная переменная в этом методе, поэтому попытка доступа к ней через robodisco.findVideos не будет работать.

У меня нет решения для вас, потому что у меня похожая проблема, и в настоящее время я изучаю, как ее решить.Методы, за которыми я пытаюсь шпионить, определены вне пространства имен моего плагина jQuery, как рекомендовано в плагине для создания документации .

Я обновлю, если найду решение.Я не могу найти много, и я думаю, что я не смогу захватить свои методы, так как они обернуты в анонимный вызов функции, но мы увидим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...