繁体   English   中英

单元测试Backbone.Marionette监听器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM