reactjs 组件的单元测试在作为 props 传递的函数上失败
unittest for reactjs component fails on function passed as props
我正在尝试为编写的简单组件编写单元测试。
这是我的组件:
const ErrorWrpper = (props) =>(
<div className={props.class} style={props.validateForm(props.inputType)?
{display: 'none'}:{}}>
<span>{props.message}</span></div>
)
export default ErrorWrpper;
这是我的测试:
import React from 'react';
import { expect } from '../../test_helper';
import { shallow } from 'enzyme';
import { it, describe, beforeEach } from 'mocha';
import ErrorWrapper from '../../../src/app/components/login/ErrorWrapper';
let errorWrapper;
describe("ErrorWrapper component unit tests", () => {
function validateForm(test){
}
before(() => {
errorWrapper = shallow(<ErrorWrapper class="test" inputType="all" validateForm={this.validateForm}/>);
});
// these tests check that each className that should exist, exists
describe("className check", () => {
it('should have className test', () => {
expect(errorWrapper.find('test')).to.exist;
});
})
})
现在当我 运行 它时,我得到了这个:
ErrorWrapper component unit tests "before all" hook:
TypeError: Cannot read property 'validateForm' of undefined
如您所见,我正在尝试将 validateError 函数作为道具提供,但我仍然收到错误。有什么想法吗?
看起来您没有在 before all 挂钩中获得对 this
的引用。尝试使用箭头函数来定义您的 validateForm
函数,以便它会自动将其与 this
引用绑定,或者您需要手动绑定 validateForm
函数,例如 this.validateForm.bind(this)
.
不清楚为什么要在测试组件实例化中使用 this
。 这个应该有效:
errorWrapper = shallow(<ErrorWrapper class="test" inputType="all" validateForm={validateForm} />);
此外,您的组件中有一个拼写错误:ErrorWrpper
是 ErrorWrapper
,对吗?
您也没有将 message
道具传递给它。
我正在尝试为编写的简单组件编写单元测试。
这是我的组件:
const ErrorWrpper = (props) =>(
<div className={props.class} style={props.validateForm(props.inputType)?
{display: 'none'}:{}}>
<span>{props.message}</span></div>
)
export default ErrorWrpper;
这是我的测试:
import React from 'react';
import { expect } from '../../test_helper';
import { shallow } from 'enzyme';
import { it, describe, beforeEach } from 'mocha';
import ErrorWrapper from '../../../src/app/components/login/ErrorWrapper';
let errorWrapper;
describe("ErrorWrapper component unit tests", () => {
function validateForm(test){
}
before(() => {
errorWrapper = shallow(<ErrorWrapper class="test" inputType="all" validateForm={this.validateForm}/>);
});
// these tests check that each className that should exist, exists
describe("className check", () => {
it('should have className test', () => {
expect(errorWrapper.find('test')).to.exist;
});
})
})
现在当我 运行 它时,我得到了这个:
ErrorWrapper component unit tests "before all" hook:
TypeError: Cannot read property 'validateForm' of undefined
如您所见,我正在尝试将 validateError 函数作为道具提供,但我仍然收到错误。有什么想法吗?
看起来您没有在 before all 挂钩中获得对 this
的引用。尝试使用箭头函数来定义您的 validateForm
函数,以便它会自动将其与 this
引用绑定,或者您需要手动绑定 validateForm
函数,例如 this.validateForm.bind(this)
.
不清楚为什么要在测试组件实例化中使用 this
。 这个应该有效:
errorWrapper = shallow(<ErrorWrapper class="test" inputType="all" validateForm={validateForm} />);
此外,您的组件中有一个拼写错误:ErrorWrpper
是 ErrorWrapper
,对吗?
您也没有将 message
道具传递给它。