2014-09-11 3 views
1

Я хотел бы проверить, что слушатели прикрепляются к моей кукольной компоненте, например, к контроллеру:Модульного тестирования Backbone.Marionette слушатели

Примера кода компоненты:

var MyController = Marionette.Controller.extend({ 
    initialize: function() { 

     this.listenTo(OtherModule, "start", function() { 
      // something happens here 
     }); 
     this.listenTo(OtherModule, "stop", function() { 
      // something happens here 
     }); 

    }) 
}); 

var myController = new MyController(); 

Пример кода тест блока:

describe("MyController", function() { 
    it("should have 2 listeners registered", function() { 
     // ? 
    }); 
}); 

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

Как я могу проверить, что слушает мой компонент?

ответ

1

Я думаю, что вы приближаетесь к модульному тестированию не так - unit tests should check that your object interacts with the outside world in the expected way. They shouldn't be concerned with implementation details (например, точное количество прослушивателей событий, которые есть у Объекта).

Сказав, что вы можете использовать _listeners (Backbone 1.0.x) или _listeningTo (Backbone 1.1.x) недвижимость:

var controller = new MyController; 

describe("MyController", function() { 
    it("should have 2 listeners registered", function() { 
     expect(Object.keys(controller._listeners).length).toEqual(2) 
    }); 
}); 

Source - Marionette.Controller расширяет Backbone.Events, который stores listeners в этой собственности.

Я бы не использовал этот подход в модульном тесте, но он может быть очень полезен для отладки утечек памяти.

+0

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

0

Когда я хочу отлаживать такие вещи, я часто использую window.MyController = MyController. Затем в консоли я могу сохранить window.MyController и поиграть с ним.

Похоже, что он покажет объекты, которые он слушает. Но я не обязательно вижу, к каким событиям он привязан таким образом. В любом случае, возможно, посмотрите. Я также использую Chrome, поэтому Firebug в Mozilla может дать лучшую информацию.