[英]Passing prop to react component on test
Im tryng to test a class component that needs some props to render the html, not sure why is not working.我试图测试一个需要一些道具来呈现 html 的类组件,不知道为什么不起作用。 Im starting tests with jest and react now, so im not really experienced.我开玩笑地开始测试并立即做出反应,所以我并没有真正的经验。 What im missing?我缺少什么?
Test component测试组件
const mockStore = configureMockStore();
const store = mockStore({});
describe("Pokemon detail", () => {
const mockPokemon = {
sprites: {
back_default:
"https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/132.png"
},
name: "ditto",
abilities: [
{
ability: {
name: "imposter",
url: 'https://pokeapi.co/api/v2/ability/150/"'
}
},
{
ability: {
name: "imposter",
url: "https://pokeapi.co/api/v2/ability/150/"
}
}
],
types: [
{
type: {
name: "normal"
}
}
]
}
const wrapper = mount(
<Provider store={store}>
<PokemonDetail pokemon={mockPokemon} />
</Provider>
);
expect(wrapper).toMatchSnapshot();
});
error message is this错误信息是这样的
TypeError: Cannot read property 'sprites' of undefined
render() {
<h1>oi</h1>
if (this.props.pokemon.sprites) {
^
const habilidades = this.props.pokemon.abilities.map(element => {
return <li key={element.ability.url}>{element.ability.name}</li>;
});
tested component测试组件
class PokemonDetail extends React.Component {
render() {
if (this.props.pokemon.sprites) {
const habilidades = this.props.pokemon.abilities.map(element => {
return <li key={element.ability.url}>{element.ability.name}</li>;
});
const tipos = this.props.pokemon.types.map(element => {
return <li key={element.type.url}>{element.type.name}</li>;
});
return (
<div className="ui card">
<div className="image">
<img src={this.props.pokemon.sprites.back_default} />
</div>
<div className="content">
<a className="header">{this.props.pokemon.name}</a>
</div>
<button
onClick={() => this.props.favoritePokemon(this.props.pokemon.name)}
className="ui button primary"
>
Add
</button>
</div>
);
}
return <div />;
}
}
const mapStateToProps = state => {
return { pokemon: state.pokemon };
};
export default connect(mapStateToProps,{favoritePokemon})(PokemonDetail);
Not sure why the mockPokemon with fake data is not taking place on the props object....seems right to me不知道为什么带有假数据的模拟口袋妖怪没有发生在道具对象上......对我来说似乎是正确的
Since PokemonDetail
is a Redux connected component, and pokemon
prop is handled by Redux, the prop in <PokemonDetail pokemon={mockPokemon} />
will be overridden by Redux.由于PokemonDetail
是一个 Redux 连接组件,并且pokemon
prop 由 Redux 处理,因此<PokemonDetail pokemon={mockPokemon} />
的 prop 将被 Redux 覆盖。
Instead, the object should be passed as a part of Redux store:相反,该对象应该作为 Redux 存储的一部分传递:
const store = mockStore({ pokemon: mockPokemon });
const wrapper = mount(
<Provider store={store}>
<PokemonDetail />
</Provider>
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.