JS,单元测试:期待回调

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS,单元测试:期待回调相关的知识,希望对你有一定的参考价值。

我正在使用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();
    });
});
另一答案

你在做什么不是单元测试,但是因为你想测试我会给出一个解决方案。下面是我为您制作的茉莉花脚本示例

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)

以上是关于JS,单元测试:期待回调的主要内容,如果未能解决你的问题,请参考以下文章

mocha.js

第1129期对vue.js单文件(.vue)进行单元测试

Spec没有期待——Jasmine测试回调函数

在 VS 中运行单元测试与调试单元测试时,我应该期待啥区别?

运行minitest时出错,期待但是渲染

期待(接受).toEqual(预期) - 错误