繁体   English   中英

JEST 抛出 .finally 不是一个函数

[英]JEST throws .finally is not a function

这是我的反应组件:

import { sendAnalytics } from 'analytics';

class MyComponent extends React.Component {
    myMethod() {
        console.log('do something!');
    }

    render() {
        return (
            <Button 
                onClick={submitAnalytics({name: 'foo'}).finally(this.myMethod())} 
                dataset={{"data-id": "button"}}
            > Send Analytics
            </Button>
            }
        )
    }
}

我的测试是这样的:

import * as analytics from 'analytics';
jest.mock('analytics');

describe('Analytics', () => {
    it('Should call analytics when button is clicked', () => {
        analytics.submitAnalytics.mockResolvedValue(Promise.resolve(true));
        const tree = ReactTestRenderer.create(<MyComponent />);

        // Actual implementation of following 3 lines is slightly different.
        const button = tree.root.findByProps({"data-id": "button"});
        button.props.onClick();
        expect(analytics.submitAnalytics).toHaveBeenCalled();
    });
});

我尝试了几种不同的模拟策略,例如:

analytics.submitAnalytics.mockImplementation(() => {
    return Promise.resolve(true)
});

似乎什么都解决不了。 我不断收到以下错误:

TypeError: (0 , analytics.submitAnalytics)(...).finally is not a function

我不知道为什么。 任何帮助表示赞赏。 如果您需要更多上下文代码,请告诉我。

测试前导入@babel/polyfill也解决了这个问题

import '@babel/polyfill';

// Your tests...

升级我的节点版本

v8.10.0

v10.19.0

解决了这个错误。

查看MDN上的浏览器兼容性图表,Node 直到10.0.0才支持 .finally()

import '@babel/polyfill'; 为我工作,但自 babel 7.4 以来已被弃用。

相反,导入它也可以正常工作:

import "core-js/stable";
import "regenerator-runtime/runtime";

最终,我只是更新了节点版本(从 8.10.2 到 12.16.1)

我想通了伙计们! 这是要做的事情:

analytics.submitPayload = jest.fn().mockImplementation(() => {
  return {
    finally: () => {
      return true;
    }
  };
});

我不知道这是对还是错,但它有效。 请让我知道是否有更好的方法来做到这一点。

我面临同样的挑战。 Reason-Jest 在 Node 环境中运行,并且“ Finally ”从 Node 版本-10.0.0 开始支持 但是我的 Jenkins 版本是 8.x,所以作为一个快速修复,你可以从代码中删除 finally。 稍后我们可以升级本地和远程服务器版本。

以下是 MDN 链接 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/finally 终于支持(MDN)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM