Phi*_*per 6 javascript unit-testing jasmine
我想测试传递给函数的参数是函数引用但是函数引用是使用传递的bind()
.
考虑一下要测试的代码(为简洁起见缩短):
initialize: function () {
this.register(this.handler.bind(this));
}
Run Code Online (Sandbox Code Playgroud)
并且这个单元测试检查是否register()
被调用handler()
:
it('register handler', function () {
spyOn(bar, 'register');
bar.initialize();
expect(bar.register.calls.argsFor(0)[0]).toEqual(bar.handler);
});
Run Code Online (Sandbox Code Playgroud)
由于绑定函数的使用,arg不等于函数引用bind()
- 如何在仍然使用bind()
方法的同时测试正确的函数引用?
注意:这不是特定于茉莉花,我只是认为它是合适的,因为使用的方法.
代替
expect(bar.register.calls.argsFor(0)[0]).toEqual(bar.handler);
Run Code Online (Sandbox Code Playgroud)
你可以做
expect(Object.create(bar.handler.prototype) instanceof bar.register.calls.argsFor(0)[0])
.toBe(true);
Run Code Online (Sandbox Code Playgroud)
要么
expect(Object.create(bar.handler.prototype)).
toEqual(jasmine.any(bar.register.calls.argsFor(0)[0]));
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为[[HasInstance]]
绑定函数的内部方法委托给[[HasInstance]]
原始函数的方法.
这篇博客文章对绑定函数进行了更详细的分析.
归档时间: |
|
查看次数: |
2999 次 |
最近记录: |