【问题标题】:Jest testing function that calls eval调用 eval 的 Jest 测试函数
【发布时间】:2018-11-29 13:57:45
【问题描述】:

我有一个使用 vue-cli 3.0 创建的 Vue TS 项目。

这是我要测试的功能:

public hopJavascript(url: string) {
    eval(url);
}

这是我使用 Jest 框架的测试功能:

test('navigation using javascript', () => {
    const url = "someurl";
    hopJavascript(url);
    
    expect(eval).toBeCalled();
});

现在我收到这条消息,test failed console logging,它告诉我我需要一个模拟版本的 eval。

如何模拟 eval

【问题讨论】:

    标签: javascript vue.js jestjs


    【解决方案1】:

    更新

    似乎您不能总是根据您的 JS 环境(浏览器或节点)覆盖 eval。有关更多信息,请参阅"How override eval function in javascript?" 的答案

    原答案

    我认为你可以在你的测试文件中重新定义eval

    global.eval = jest.fn()
    

    【讨论】:

    • 然后它说 [ts] 找不到名称“全局”。 [2304],你知道如何让 ts 识别这个
    • 经过一番研究,看起来你不能总是覆盖 eval
    • 不错,但它很旧,也许有些改变了。
    【解决方案2】:

    您需要使用 spyOn() 来跟踪您的函数。

    此解决方案应该适合您。

    import MyClass from '../MyClass';
    
    test('navigation using javascript', () => {
        const url = "someurl";
        const spy = jest.spyOn(MyClass, 'eval');
    
        MyClass.hopJavascript(url);
    
        expect(spy).toHaveBeenCalled();
    });
    

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 2021-08-08
      • 2022-01-24
      • 2020-01-24
      • 1970-01-01
      • 2020-01-08
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多