我想测试传递给函数的参数是函数引用但是函数引用是使用传递的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()
方法的同时测试正确的函数引用?
注意:这不是特定于茉莉花,我只是认为它是合适的,因为使用的方法.
代替
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]]
原始函数的方法.
这篇博客文章对绑定函数进行了更详细的分析.