当前位置:  开发笔记 > 编程语言 > 正文

如何在单元测试时测试绑定函数的相等性?

如何解决《如何在单元测试时测试绑定函数的相等性?》经验,为你挑选了1个好方法。

我想测试传递给函数的参数是函数引用但是函数引用是使用传递的bind().

考虑一下要测试的代码(为简洁起见缩短):

initialize: function () {
    this.register(this.handler.bind(this));
}

并且这个单元测试检查是否register()被调用handler():

it('register handler', function () {
    spyOn(bar, 'register');
    bar.initialize();
    expect(bar.register.calls.argsFor(0)[0]).toEqual(bar.handler);
});

由于绑定函数的使用,arg不等于函数引用bind()- 如何在仍然使用bind()方法的同时测试正确的函数引用?

注意:这不是特定于茉莉花,我只是认为它是合适的,因为使用的方法.



1> user5325596..:

代替

expect(bar.register.calls.argsFor(0)[0]).toEqual(bar.handler);

你可以做

expect(Object.create(bar.handler.prototype) instanceof bar.register.calls.argsFor(0)[0])
  .toBe(true);

要么

expect(Object.create(bar.handler.prototype)).
  toEqual(jasmine.any(bar.register.calls.argsFor(0)[0]));

这是有效的,因为[[HasInstance]]绑定函数的内部方法委托给[[HasInstance]]原始函数的方法.

这篇博客文章对绑定函数进行了更详细的分析.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有