riz*_*ied 1 sinon chai reactjs jestjs enzyme
我有一个反应组件,它接受一组对象并将它们映射到视图中的另一个反应组件中。我在测试它时运气不好,因为它给出了这个错误:
类型错误:data.map 不是函数
这是我写的测试。请注意我传递了 data 属性,我认为这应该使它起作用?
内容.test.js
import React from 'react';
import { shallow, mount } from 'enzyme';
import { expect } from 'chai';
import Content from '../components/Content.jsx';
describe('<Content />', () => {
const data = {
created: '2017-02-21T09:50:21.441815Z',
duration: 1575,
final_script: 'some script',
language: 'en-GB',
rating: 2,
url: 'some url',
};
it('renders without exploding', () => {
mount(<Content data={ data } />);
});
});
Run Code Online (Sandbox Code Playgroud)
这是组件本身
内容.jsx
function Content(props) {
const { data } = props;
return (
<div className='content_container'>
{
data.map((content, index) => <AudioBox data={ content } key={
index } />)
}
</div>
);
}
Content.propTypes = {
data: React.PropTypes.arrayOf(React.PropTypes.object),
};
export default Content;
Run Code Online (Sandbox Code Playgroud)
这是调用此内容组件的组件
主页.jsx
class Home extends Component {
constructor(props) {
super(props);
this.state = {
content: null,
};
this.logout = this.logout.bind(this);
}
componentDidMount() {
const token = localStorage.getItem('i2x_token');
const requestURL = API_CONTENT;
const requestObj = {
method: 'GET',
headers: new Headers({
Authorization: `JWT ${token}`,
}),
};
request(requestURL, requestObj).then((reply) => {
if (reply.results.length > 0) {
this.setState({ content: reply.results });
} else {
console.log('no reply from API');
}
});
}
logout() {
localStorage.removeItem('i2x_token');
browserHistory.push('/');
}
render() {
const data = this.state.content;
return (
<div className='container'>
<Header logout={ this.logout } />
{ data !== null &&
<Content data={ this.state.content } />
}
</div>
);
}
}
export default Home;
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
我认为data您设置的不是array,因此您会收到错误。
检查一下:
let data = {};
data.map(el => console.log(el))Run Code Online (Sandbox Code Playgroud)
确保data 应该是一个 arraymap ,您也可以在使用by之前进行检查Array.isArray,如下所示:
Array.isArray(data) && data.map((content, index) => <AudioBox data={content} key={index} />
Run Code Online (Sandbox Code Playgroud)
尝试这个:
以这种方式定义数据:
const data = [
{
created: '2017-02-21T09:50:21.441815Z',
duration: 1575,
final_script: 'some script',
language: 'en-GB',
rating: 2,
url: 'some url',
}
];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13528 次 |
| 最近记录: |