我正在使用Enzyme/Jest爲我的容器帽子上的函數編寫測試,它是通過複選框組件的onChange觸發的。我試圖模擬一個'改變',但是,'改變'不會觸發onChange函數被調用。不知道這裏發生了什麼......我嘗試將模擬更改爲「點擊」,刪除了目標對象,但仍然無法工作。expect(jest.fn()).toHaveBeenCalled()error
集裝箱
export class Data extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
data_list_api: [],
selected_data: this.props.dataForm,
};
}
handleCheck = (event) => {
const newSelectedData = Object.assign({}, this.state.selected_data);
if (newSelectedData[event.target.name]) {
delete newSelectedData[event.target.name];
} else {
newSelectedData[event.target.name] = [true, event.target.id];
}
this.setState({ selected_data: newSelectedData });
}
render() {
const dataOptions = this.state.data_list_api.map((val, index) => (
<div className="form-group no-margin" key={index}>
<div className="col-md-12">
<div className="checkbox">
<Checkbox
name={val.data_name}
id={val.data_id}
onChange={this.handleCheck}
checked={this.state.selected_datas[val.data_name] ? true : false}
disabled={!this.state.selected_datas[val.data_name] && this.getObjectLength(this.state.selected_datas) > 3}
/>
</div>
</div>
</div>
));
return (
<div>
{dataOptions}
</div>
)
}
}
測試
import React from 'react';
import { shallow, mount, render } from 'enzyme';
import { fromJS } from 'immutable';
import { Data } from '../index';
function setup() {
const props = {
submitDataForm: jest.fn(),
}
const wrapper = shallow(<Data {...props} />);
return { props, wrapper };
}
it('expects handleCheck to work',() => {
const { wrapper, props } = setup();
wrapper.setState({ data_list_api: [
{ data_name: 'data1 name',
data_id: 123 },
{ data_name: 'data2 name',
data_id: 234 },
{ data_name: 'data2 name',
data_id: 345 }],
});
wrapper.instance().handleCheck = jest.fn();
wrapper.update();
wrapper.find('.checkbox').first().simulate('change', { target: { checked: true } });
expect(wrapper.instance().handleCheck).toHaveBeenCalled();
expect(wrapper).toMatchSnapshot();
});
錯誤
expect(jest.fn()).toHaveBeenCalled()
Expected mock function to have been called.
at Object.<anonymous> (app/containers/Schools/tests/index.test.js:95:44)
at Promise (<anonymous>)
at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:169:7)
任何幫助將是非常讚賞d!
爲什麼不只是測試狀態已經改變了嗎? –
它也不適用於我,因爲onChange函數甚至沒有被調用。似乎有一個「模擬變化」部分的問題,我不明白爲什麼它不模擬變化(因此不會導致onChange函數運行,從而不會改變狀態)。 – cssun25