JS,单元测试:期待回调

5 unit-testing jasmine leaflet typescript angular

我正在使用Leaflet,我正在创建一个标记.一旦鼠标离开此标记,我想删除我正在显示的弹出窗口mouseenter:

marker.on('mouseout', e => this.leafletMap.closePopup());
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我想知道提供的回调是否是我所期望的.

我已经测试了事件是否发生在mouseout上

expect((mockedMarker.on as jasmine.Spy).calls.argsFor(0)[0]).toEqual('mouseover');
Run Code Online (Sandbox Code Playgroud)

有关如何做到这一点的任何想法?

我试过这样的事

expect((mockedMarker.on as jasmine.Spy).calls.argsFor(0)[1]).toEqual(JSON.stringify(component.leafletMap.closePopup));
Run Code Online (Sandbox Code Playgroud)

但我不知道我在做什么(我是单位测试的新手),而且我无法在网上找到解决方案,因为我真的不知道怎么称呼这种测试.

我应该声明我在打字稿中工作.

And*_*erg 0

看起来您想要测试的是函数回调是否执行您想要的操作。为此,您不应该检查函数字符串。那个测试太脆弱了。

相反,您应该检查当您调用回调时,传单是否已关闭。这是一个简单的测试。它假设您已经正确搭建了标记、传单和回调:

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();
    });
});
Run Code Online (Sandbox Code Playgroud)