我正在使用Leaflet,我正在创建一个标记.一旦鼠标离开此标记,我想删除我在mouseenter上显示的弹出窗口:
marker.on('mouSEOut',e => this.leafletMap.closePopup());
在我的测试中,我想知道提供的回调是否是我所期望的.
我已经测试了事件是否发生在mouSEOut上
expect((mockedMarker.on as jasmine.Spy).calls.argsFor(0)[0]).toEqual('mouSEOver');
有关如何做到这一点的任何想法?
我试过这样的事
expect((mockedMarker.on as jasmine.Spy).calls.argsFor(0)[1]).toEqual(JSON.stringify(component.leafletMap.closePopup));
但我不知道我在做什么(我是单位测试的新手),而且我无法在网上找到解决方案,因为我真的不知道怎么称呼这种测试.
我应该声明我在打字稿中工作.
解决方法
看起来你想测试的是函数回调做你想要的.为此,您不应该检查函数字符串.那个测试太脆弱了.
相反,您应该在调用回调时检查该传单是否已关闭.这是一个简单的测试.它假定您已正确搭建标记,传单和回调:
describe('Marker',() => { it('should invoke closePopup',() => { let marker = createMarkerWithLeaflet(); spyOn(marker,'on'); spyOn(marker.leaflet,'closePopup'); marker.on.calls.argsFor(0)[1](); expect(marker.leaflet.closePopup).toHaveBeenCalled(); }); });