开始练习单元测试。
并面临这样的问题:我正在尝试测试存储方法调用。
当我运行这个测试时:
import * as React from 'react';
import {observer} from 'mobx-react';
import {mount} from 'enzyme';
import {instance, mock, verify, when} from 'ts-mockito';
class TestStore {
onClick = () => {};
}
interface Props {
store: any;
}
@observer
export class Test extends React.Component<Props, any> {
render() {
return (
<div
className={'test'}
onClick={this.props.store.onClick}/>
);
}
}
describe('onclick test', () => {
let testStoreMocked: any;
let testStoreInst: any;
let testElem: any;
beforeEach(() => {
testStoreMocked = mock(TestStore);
testStoreInst = instance(testStoreMocked);
testElem = mount<Test>(<Test
store={testStoreInst}
/>);
});
test('test', () => {
when(testStoreMocked.onClick).thenReturn();
console.log(testElem.find('div.test').html());
testElem.find('div.test').simulate('click');
verify(testStoreMocked.onClick()).once();
});
});
但有这样的错误
Expected "onClick()" to be called 1 time(s). But has been called 0 time(s).
50 | console.log(testElem.find('div.test').html());
51 | testElem.find('div.test').simulate('click');
> 52 | verify(testStoreMocked.onClick()).once();
| ^
53 | });
54 | });
如果我像这样通过组件方法包装存储方法:
import * as React from 'react';
import {observer} from 'mobx-react';
import {mount} from 'enzyme';
import {instance, mock, verify, when} from 'ts-mockito';
class TestStore {
onClick = () => {};
}
interface Props {
store: any;
}
@observer
export class Test extends React.Component<Props, any> {
onClick = () => {
this.props.store.onClick();
};
render() {
return (
<div
className={'test'}
onClick={this.onClick}/>
);
}
}
describe('onclick test', () => {
let testStoreMocked: any;
let testStoreInst: any;
let testElem: any;
beforeEach(() => {
testStoreMocked = mock(TestStore);
testStoreInst = instance(testStoreMocked);
testElem = mount<Test>(<Test
store={testStoreInst}
/>);
});
test('test', () => {
when(testStoreMocked.onClick).thenReturn();
console.log(testElem.find('div.test').html());
testElem.find('div.test').simulate('click');
verify(testStoreMocked.onClick()).once();
});
});
测试通过,一切都很有趣。是否有可能验证存储方法而不用组件方法包装它?