模拟来自 HOC 的道具以响应快照测试
Mocking props from HOC in react for snapshot tests
我正在尝试为一个简单的注销按钮组件适当地模拟道具。该组件中唯一的道具是 firebase
道具,它来自名为 withFirebase
.
的高阶组件 (HOC)
import React from 'react';
import { withFirebase } from '../Firebase';
const SignOutButton = ({ firebase }) => (
<button type="button" onClick={firebase.doSignOut}>
Sign Out
</button>
);
export default withFirebase(SignOutButton);
export { SignOutButton as SignOutButtonTest };
我的想法是我可以在没有 HOC 的情况下导出功能组件并直接模拟 firebase
道具并将其传递给组件以进行快照测试。
import React from 'react';
import renderer from 'react-test-renderer';
import SignOutButtonTest from '../SignOutButton';
describe('SignOutButton Tests', () => {
it('renders with some data', () => {
const props = {
firebase: {
doSignOut: () => {},
}
};
const tree = renderer.create(
<SignOutButtonTest {...props} />
).toJSON();
expect(tree).toMatchSnapshot();
});
});
然而,当我 运行 这个测试时,我得到以下 TypeError
。关于如何正确模拟此 firebase
道具以进行快照测试,有什么想法吗?
● SignOutButton Tests › renders with some data
TypeError: Cannot read property 'doSignOut' of null
3 |
4 | const SignOutButton = ({ firebase }) => (
> 5 | <button type="button" onClick={firebase.doSignOut}>
| ^
6 | Sign Out
7 | </button>
8 | );
使用命名导出而不是默认导出。这里:
import SignOutButtonTest from '../SignOutButton';
您仍在导入 HOC 版本。
应该是:
import { SignOutButtonTest } from '../SignOutButton';
我正在尝试为一个简单的注销按钮组件适当地模拟道具。该组件中唯一的道具是 firebase
道具,它来自名为 withFirebase
.
import React from 'react';
import { withFirebase } from '../Firebase';
const SignOutButton = ({ firebase }) => (
<button type="button" onClick={firebase.doSignOut}>
Sign Out
</button>
);
export default withFirebase(SignOutButton);
export { SignOutButton as SignOutButtonTest };
我的想法是我可以在没有 HOC 的情况下导出功能组件并直接模拟 firebase
道具并将其传递给组件以进行快照测试。
import React from 'react';
import renderer from 'react-test-renderer';
import SignOutButtonTest from '../SignOutButton';
describe('SignOutButton Tests', () => {
it('renders with some data', () => {
const props = {
firebase: {
doSignOut: () => {},
}
};
const tree = renderer.create(
<SignOutButtonTest {...props} />
).toJSON();
expect(tree).toMatchSnapshot();
});
});
然而,当我 运行 这个测试时,我得到以下 TypeError
。关于如何正确模拟此 firebase
道具以进行快照测试,有什么想法吗?
● SignOutButton Tests › renders with some data
TypeError: Cannot read property 'doSignOut' of null
3 |
4 | const SignOutButton = ({ firebase }) => (
> 5 | <button type="button" onClick={firebase.doSignOut}>
| ^
6 | Sign Out
7 | </button>
8 | );
使用命名导出而不是默认导出。这里:
import SignOutButtonTest from '../SignOutButton';
您仍在导入 HOC 版本。
应该是:
import { SignOutButtonTest } from '../SignOutButton';