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