私はreactjsコンポーネントをユニットテストしようとしています:
import React from 'react';
import Modal from 'react-modal';
import store from '../../../store'
import lodash from 'lodash'
export class AddToOrder extends React.Component {
constructor(props) {
super(props);
this.state = {checked: false}
//debugger
}
checkBoxChecked() {
return true
}
render() {
console.log('testing=this.props.id',this.props.id )
return (
<div className="order">
<label>
<input
id={this.props.parent}
checked={this.checkBoxChecked()}
onChange={this.addToOrder.bind(this, this.props)}
type="checkbox"/>
Add to order
</label>
</div>
)
}
}
export default AddToOrder;
開始するために、私はすでにcheckBoxCheckedメソッドをアサートするのに苦労しています:
import React from 'react-native';
import {shallow} from 'enzyme';
import {AddToOrder} from '../app/components/buttons/addtoorder/addtoorder';
import {expect} from 'chai';
import {mount} from 'enzyme';
import jsdom from 'jsdom';
const doc = jsdom.jsdom('<!doctype html><html><body></body></html>')
global.document = doc
global.window = doc.defaultView
let props;
beforeEach(() => {
props = {
cart: {
items: [{
id: 100,
price: 2000,
name:'Docs'
}]
}
};
});
describe('AddToOrder component', () => {
it('should be handling checkboxChecked', () => {
const wrapper = shallow(<AddToOrder {...props.cart} />);
expect(wrapper.checkBoxChecked()).equals(true); //error appears here
});
});
`` `
コンポーネントでメソッドを単体テストするにはどうすればよいですか?これは私が得ているエラーです:
TypeError: Cannot read property 'checked' of undefined
あなたはほとんどそこにいます。あなたの期待をこれに変えてください:
expect(wrapper.instance().checkBoxChecked()).equals(true);
このリンク を実行して、酵素を使用したコンポーネントメソッドのテストについて詳しく知ることができます。
受け入れられた答えが機能していないと思う人のために、.dive()
を使用する前に浅いラッパーで.instance()
を使用してみてください:
expect(wrapper.dive().instance().somePrivateMethod()).toEqual(true);
リファレンス: 酵素を使用したコンポーネントメソッドのテスト
前の回答の延長。コンポーネント(Redux)を接続している場合は、次のコードを試してください:
const store=configureStore();
const context = { store };
const wrapper = shallow(
<MyComponent,
{ context },
);
const inst = wrapper.dive().instance();
inst.myCustomMethod('hello');