【问题标题】:Location reload in Jasmine茉莉花中的位置重新加载
【发布时间】:2014-04-29 01:59:49
【问题描述】:

我真的不确定如何进行测试? (间谍?)

function reloadPage() {
  $('#logo').click(function() {
    location.reload();
  })
}

任何建议都会很棒!

【问题讨论】:

    标签: javascript ruby-on-rails-3 jasmine


    【解决方案1】:

    您可能不确定如何测试这段代码的原因是因为它在做两件不同的事情,您应该将它分成更小的块。

    我在这里看到两个不同的功能:

    • 点击事件处理
    • 重新加载页面

    那么为什么不这样分解逻辑呢?

    function reloadPage() {
        location.reload();
    }
    
    function bindEvents() {
        $('#logo').click(reloadPage);
    }
    

    现在您可以使用 Spies 单独测试它们:

    describe('when the logo is clicked', function() {
       var logo;
       var handlers;
       beforeEach(function() {
           handlers = {
               locationReload: location.reload, // handle for location.reload()
               reloadPage: reloadPage      // handle for your reloadPage()
           };
    
           logo = $('#logo').click(reloadPage);
    
           // attach Spy on reloadPage() and let the function call through
           spyOn(handlers, 'reloadPage').and.callThrough();
    
           // attach Spy on location.reload() 
           spyOn(handlers, 'locationReload');
    
       });
    
       it('will execute reloadPage function', function() {
            logo.trigger('click');
            expect(handlers.reloadPage).toHaveBeenCalled();
       });
    
       it('will reload the page', function() {
            logo.trigger('click');
            expect(handlers.locationReload).toHaveBeenCalled();
       });
    
       afterEach(function() {
           // clean up event bindings after each test
           logo.off('click');
       });
    
    });
    

    没有太多需要测试reloadPage 处理程序是否正确添加到#logo 的点击事件,因为该测试模拟.click() 并检查reloadPage 是否被调用。

    因此很可能您只需要拥有it('will reload the page') 规范,而不是两者兼有。

    【讨论】:

    • 感谢@sweetamylase!这是将一个功能分成两个的好建议。当我运行测试时,它看起来确实是“预期的间谍 reloadPage 已被调用”。和“预计间谍 locationReload 已被调用。”?你知道它为什么这样做吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多