我試圖從Jest Tutorial Page啓動基本的例子,使用玩笑,反應,打字稿開玩笑/反應/打字稿編譯錯誤,在教程的例子
Link.tsx
import * as React from 'react';
const STATUS = {
NORMAL: 'normal',
HOVERED: 'hovered',
};
interface theProps {
page:string
}
export default class Link extends React.Component<theProps,any> {
constructor(props) {
super(props);
this._onMouseEnter = this._onMouseEnter.bind(this);
this._onMouseLeave = this._onMouseLeave.bind(this);
this.state = {
class: STATUS.NORMAL,
};
}
_onMouseEnter() {
this.setState({class: STATUS.HOVERED});
}
_onMouseLeave() {
this.setState({class: STATUS.NORMAL});
}
render() {
return (
<a
className={this.state.class}
href={this.props.page || '#'}
onMouseEnter={this._onMouseEnter}
onMouseLeave={this._onMouseLeave}>
{this.props.children}
</a>
);
}
}
test.tsx
import * as React from 'react';
import Link from '../app/Link';
import * as renderer from 'react-test-renderer';
it('Link changes the class when hovered',() => {
const component = renderer.create(
<Link page="http://www.facebook.com">Facebook</Link>
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
// manually trigger the callback
tree.props.onMouseEnter();
// re-renderingf
tree = component.toJSON();
expect(tree).toMatchSnapshot();
// manually trigger the callback
tree.props.onMouseLeave();
// re-rendering
tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
但即使測試運行良好jest
,Webpack和IntelliJ都抱怨行tree.props.onMouseEnter();
: Unresolved function or method onMouseLeave()
這種有意義的,因爲道具對象具有類型{ [propName: string]: string }
有什麼我可以包括跳過這些警告/錯誤信息?
把'任何'使它的工作。感覺髒,我仍然對'tree.props.onMouseEnter'感到困惑... –
是的,我使用React.HTMLProps接口 爲tree.props是相當hacky和誤導, 但它的一種我期待找到/發現; 我從練習學到的是 該道具將被填充道具「完成」 打電話時/創建組件/元素 這樣你就可以測試它的存在, 觸發其處理程序, 也樹/樹項會只填充DOM元素或字符串... 和它的孩子的內部元素應該在'treeItem'兒童 上找到,因此可以'查詢?'結果。 –
Dan
如果(這樣的功能存在),我們可以在 在僞sqlx中查詢: 「from tree.children select item where item.type =='a'and item.props。HREF == '#HOME」' 要不然 injsLike: 期望( tree.children .ofType() .find(X => x.type === '一' && X。 props.href =='#HOME') ).toBeSomething(); –
Dan