位置重新加载Jasmine [英] Location reload in Jasmine

查看:170
本文介绍了位置重新加载Jasmine的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm really not sure how to approach testing this? (spyOn?)

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

任何建议都会很棒!

推荐答案

你可能不确定如何测试这段代码是因为它正在做2个不同的东西,你应该把它分成更小的块。

The reason you may be unsure about how to test this piece of code is because it's doing 2 different things and you should break it up into smaller chunks.

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

I see two distinct functions here:


  • 点击事件处理

  • 重装页面

那么为什么不打破这样的逻辑?

So why not break up the logic like so?

function reloadPage() {
    location.reload();
}

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

现在你可以使用Spies分别测试它们:

Now you can test them separately using 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

There's not much need to test that the reloadPage handler was correctly added to the #logo's click event because the test is simulating a .click() and checking if reloadPage gets called or not.

所以很有可能你只需要它('将重新载入页面') spec,不是两个。

So most likely you'd only need to have the it('will reload the page') spec, not both.

这篇关于位置重新加载Jasmine的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆