[react] ReactTestUtils custom typeguards

This commit is contained in:
Vincent Siao
2016-03-14 01:46:14 -07:00
parent 1917a4122a
commit 5e85e146c6
3 changed files with 31 additions and 7 deletions
+11 -4
View File
@@ -104,10 +104,17 @@ declare namespace __React {
export function mockComponent(
mocked: MockedComponentClass, mockTagName?: string): typeof TestUtils;
export function isElementOfType(
element: ReactElement<any>, type: ReactType): boolean;
export function isDOMComponent(instance: ReactInstance): boolean;
export function isCompositeComponent(instance: ReactInstance): boolean;
export function isElementOfType<T extends HTMLElement>(
element: ReactElement<any>, type: string): element is ReactHTMLElement<T>;
export function isElementOfType<P extends DOMAttributes, T extends Element>(
element: ReactElement<any>, type: string): element is DOMElement<P, T>;
export function isElementOfType<P>(
element: ReactElement<any>, type: SFC<P>): element is SFCElement<P>;
export function isElementOfType<P, T extends Component<P, {}>, C extends ComponentClass<P>>(
element: ReactElement<any>, type: ClassType<P, T, C>): element is CElement<P, T>;
export function isDOMComponent(instance: ReactInstance): instance is Element;
export function isCompositeComponent(instance: ReactInstance): instance is Component<any, any>;
export function isCompositeComponentWithType(
instance: ReactInstance,
type: ComponentClass<any>): boolean;
+19 -2
View File
@@ -220,9 +220,12 @@ domNode = ReactDOM.findDOMNode(domNode);
// React Elements
// --------------------------------------------------------------------------
var type = element.type;
var type: React.ComponentClass<Props> = element.type;
var elementProps: Props = element.props;
var key = element.key;
var key: React.Key = element.key;
var t: React.ReactType<any>;
var name = typeof t === "string" ? t : t.displayName;
//
// React Components
@@ -543,6 +546,20 @@ var foundComponent: ModernComponent = TestUtils.findRenderedComponentWithType(
var foundComponents: ModernComponent[] = TestUtils.scryRenderedComponentsWithType(
inst, ModernComponent);
// ReactTestUtils custom type guards
var emptyElement: React.ReactElement<{}>;
if (TestUtils.isElementOfType(emptyElement, StatelessComponent)) {
emptyElement.props.foo;
}
var anyInstance: Element | React.Component<any, any>;
if (TestUtils.isDOMComponent(anyInstance)) {
anyInstance.getAttribute("className");
} else if (TestUtils.isCompositeComponent(anyInstance)) {
anyInstance.props;
}
//
// TransitionGroup addon
// --------------------------------------------------------------------------
+1 -1
View File
@@ -174,12 +174,12 @@ declare namespace __React {
contextTypes?: ValidationMap<any>;
childContextTypes?: ValidationMap<any>;
defaultProps?: P;
displayName?: string;
}
interface ClassicComponentClass<P> extends ComponentClass<P> {
new(props?: P, context?: any): ClassicComponent<P, any>;
getDefaultProps?(): P;
displayName?: string;
}
//