[英]Unit testing Backbone.Marionette listeners
我想检查哪些监听器连接到了我的木偶组件,例如控制器:
组件的示例代码:
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
方法执行我想使用的函数,但是我很好奇组件上是否直接有可用的附加事件列表。
如何检查我的组件在听什么?
我认为您正在以错误的方式进行单元测试 - 单元测试应该检查您的对象是否以预期的方式与外界交互。 他们不应该关心实现细节 (例如对象具有的事件侦听器的确切数量)。
话虽如此,您可以使用_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)
});
});
源 Marionette.Controller
扩展了Backbone.Events
,后者将侦听器存储在该属性中。
我不会在单元测试中使用这种方法,但是它对于调试内存泄漏非常有用。
当我想调试这种东西时,我经常使用window.MyController = MyController。 然后在控制台中,我可以保存window.MyController并进行操作。
看起来它将显示它正在侦听的对象,但我不一定要看到它以这种方式绑定了什么事件。 无论如何可能是一看。 我也在使用Chrome,因此Mozilla中的Firebug可能会提供更好的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.