我正在使用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));
但我不知道我在做什么(我是单位测试的新手),我无法在网上找到解决方案,因为我真的不知道如何称呼这种测试。
我应该声明我使用的是 Typescript 。
答案 0 :(得分:1)
你在做的不是单元测试,但是因为你想测试我会给出一个解决方案。下面是我为你制作的茉莉花脚本示例
let marker = function() {
function on(a, b) {
console.log(a, b);
}
this.on = on;
}
describe('this', () => {
it('xya', () => {
y = new marker()
spyOn(y, 'on');
y.on('onmouseout', e => this.leafletMap.closePopup());
const lambda = y.on.calls.argsFor(0)[1]
console.log(lambda.toString())
expect(lambda.toString()).toEqual("e => this.leafletMap.closePopup()")
})
})
在终端上运行
$ npx jasmine mocking.js
Randomized with seed 33786
Started
e => this.leafletMap.closePopup()
.
1 spec, 0 failures
Finished in 0.006 seconds
Randomized with seed 33786 (jasmine --random=true --seed=33786)
答案 1 :(得分: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();
});
});