Javascript 单元测试$(文档).on

Javascript 单元测试$(文档).on,javascript,jquery,testing,jasmine,Javascript,Jquery,Testing,Jasmine,我正在测试一个名为watch的函数,它看起来像: function watch(interaction) { $(document).on(interaction.event, interaction.selector, function() { ... }); } 我的想法是监视$document.on并检查是否使用我传递的参数调用它: it('should watch events on DOM elements', function() { var

我正在测试一个名为watch的函数,它看起来像:

function watch(interaction) {
    $(document).on(interaction.event, interaction.selector, function() {
        ...
    });
}
我的想法是监视$document.on并检查是否使用我传递的参数调用它:

it('should watch events on DOM elements', function() {
    var $doc = $(document);

    spyOn($doc, 'on');

    watch({ event: 'click', selector: '#foo' });

    expect($doc.on).toHaveBeenCalledWith('click', '#foo', jasmine.any(Function));
});
但是,Jasmine告诉我,从未调用$doc.on。我的想法是,这是因为测试中的$doc引用的实例与watch中的$document不同

如果是这种情况,我如何测试以确保watch正确连接$document.on?

您可以模拟$,以便调用它总是返回具有相同.on模拟方法的相同对象。这很有意义,因为您不想测试jQuery本身


我没有对茉莉花做过任何嘲弄,所以我不能提供一个具体的例子。您可能想看看jest,它构建在Jasmine之上,默认情况下模拟每个模块:

您可以模拟$,以便调用它总是返回具有相同.on模拟方法的相同对象。您可能想看看jest,它是建立在jasmine之上的:。请提交mocking$作为答案。