dar*_*der 7 javascript reactjs jestjs
这是我的react组件:
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>
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试是这样的:
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();
});
});
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的模拟策略,例如:
analytics.submitAnalytics.mockImplementation(() => {
return Promise.resolve(true)
});
Run Code Online (Sandbox Code Playgroud)
似乎什么都没有解决。我不断收到以下错误:
TypeError: (0 , analytics.submitAnalytics)(...).finally is not a function。
我不知道为什么 任何帮助表示赞赏。如果您需要其他上下文代码,请告诉我。
@babel/polyfill测试前导入也解决了这个问题
import '@babel/polyfill';
// Your tests...
Run Code Online (Sandbox Code Playgroud)
我想通了,伙计们!这是要做的事情:
analytics.submitPayload = jest.fn().mockImplementation(() => {
return {
finally: () => {
return true;
}
};
});
Run Code Online (Sandbox Code Playgroud)
我不知道这是对还是错,但它确实有效。如果有更好的方法,请告诉我。
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |